Sobes.tech
Junior — Middle

Cum ai implementa pattern-ul de proiectare Observer?

sobes.tech AI

Răspuns de la AI

Modelul de proiectare Observer este utilizat pentru a organiza abonarea obiectelor observatoare la evenimente sau modificări de stare ale altui obiect (subiect). Pe iOS, acesta poate fi implementat în mai multe moduri, de exemplu, prin protocoale și delegați, NotificationCenter sau o implementare proprie.

Exemplu de implementare simplă printr-un protocol:

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)")
    }
}

// Utilizare:
let subject = Subject()
let observer1 = ConcreteObserver()
subject.attach(observer: observer1)
subject.setState("Stare nouă")

Această abordare permite obiectelor să se aboneze și să primească notificări despre modificări fără o legătură strânsă între ele.