Sobes.tech
Junior — Middle

Μπορεί να υλοποιηθεί ένας μηχανισμός ειδοποίησης πολλαπλών αντικειμένων ταυτόχρονα χρησιμοποιώντας το πρότυπο Observer;

sobes.tech AI

Απάντηση από AI

Ναι, το μοτίβο Observer προορίζεται ειδικά για την ειδοποίηση πολλαπλών αντικειμένων σχετικά με αλλαγές στην κατάσταση του υποκειμένου. Σε αυτό το μοτίβο, υπάρχει ένα αντικείμενο-υποκείμενο που διατηρεί μια λίστα παρατηρητών (αντικειμένων) που έχουν εγγραφεί στα γεγονότα του. Όταν αλλάζει η κατάσταση του υποκειμένου, το ειδοποιεί διαδοχικά όλους τους συνδρομητές.

Παράδειγμα σε Swift:

protocol Observer {
    func update()
}

class Subject {
    private var observers = [Observer]()

    func attach(_ observer: Observer) {
        observers.append(observer)
    }

    func notify() {
        observers.forEach { $0.update() }
    }

    func changeState() {
        // αλλαγή κατάστασης
        notify() // ειδοποιούμε όλους
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Λήφθηκε ειδοποίηση")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // και οι δύο παρατηρητές θα λάβουν την ειδοποίηση

Έτσι, το μοτίβο Observer επιτρέπει την υλοποίηση ενός μηχανισμού πολλαπλής ειδοποίησης.