Sobes.tech
Junior — Middle

Ar galima įgyvendinti kelių objektų įspėjimo mechanizmą naudojant Observer modelį?

sobes.tech AI

Atsakymas iš AI

Taip, stebėtojo (Observer) šablonas yra specialiai sukurtas informuoti kelis objektus apie subjekto būsenos pokyčius. Šiame šablone yra subjekto objektas, kuris saugo stebėtojų (objektų) sąrašą, užsiprenumeravusių jo įvykius. Kai subjekto būseną keičia, jis iš eilės praneša visus prenumeratorius.

Pavyzdys Swift kalba:

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() {
        // būsenos keitimas
        notify() // pranešame visiems
    }
}

class ConcreteObserver: Observer {
    func update() {
        print("Gauta pranešimas")
    }
}

let subject = Subject()
let observer1 = ConcreteObserver()
let observer2 = ConcreteObserver()
subject.attach(observer1)
subject.attach(observer2)
subject.changeState() // abu stebėtojai gaus pranešimą

Taip, stebėtojo šablonas leidžia įgyvendinti daugybinio pranešimo mechanizmą.