Sobes.tech
Junior — Middle

Kaip įgyvendintumėte Observer dizaino modelį?

sobes.tech AI

Atsakymas iš AI

Stebėtojo dizaino šablonas naudojamas organizuoti stebėtojų objektų prenumeratą kitam objektui (subjektui) įvykiams ar būsenos pokyčiams. iOS jį galima įgyvendinti keliais būdais, pavyzdžiui, naudojant protokolus ir delegatus, NotificationCenter arba savo įgyvendinimą.

Paprastas įgyvendinimo pavyzdys naudojant protokolą:

protocol Observer: AnyObject {
    func update(data: String)
}

class Subject {
    private var observers = [Observer]()
    private var state: String = ""

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

    func detach(observer: Observer) {
        observers.removeAll { $0 === observer }
    }

    func setState(_ newState: String) {
        state = newState
        notify()
    }

    private func notify() {
        for observer in observers {
            observer.update(data: state)
        }
    }
}

class ConcreteObserver: Observer {
    func update(data: String) {
        print("Observer received update: \(data)")
    }
}

// Naudojimas:
let subject = Subject()
let observer1 = ConcreteObserver()
subject.attach(observer: observer1)
subject.setState("Nauja būsena")

Šis požiūris leidžia objektams prenumeruoti ir gauti pranešimus apie pokyčius be glaudaus ryšio tarp jų.