Sobes.tech
Junior — Middle

Lehet-e több objektum értesítési mechanizmust egyszerre megvalósítani az Observer mintával?

sobes.tech MI

Válasz az MI-től

Igen, a Megfigyelő mintázat kifejezetten arra készült, hogy több objektumot értesítsen a tárgy állapotának változásairól. Ebben a mintában van egy tárgy-objektum, amely nyilvántartja az eseményekre feliratkozott megfigyelőket (objektumokat). Amikor a tárgy állapota megváltozik, sorban értesíti az összes feliratkozottat.

Swift példával:

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() {
        // állapot változása
        notify() // mindenki értesítése
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Értesítés érkezett")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // mindkét megfigyelő értesítést kap

Így az Observer minta lehetővé teszi több értesítési mechanizmus megvalósítását.