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ų.