Sobes.tech
Junior — Middle

Wie würdest du das Observer-Designmuster implementieren?

sobes.tech KI

Antwort von AI

Das Observer-Designmuster wird verwendet, um die Abonnements von Beobachter-Objekten an Ereignisse oder Zustandsänderungen eines anderen Objekts (des Subjekts) zu organisieren. In iOS kann es auf verschiedene Weisen implementiert werden, z.B. durch Protokolle und Delegates, NotificationCenter oder eine eigene Implementierung.

Beispiel für eine einfache Implementierung mittels eines Protokolls:

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

// Verwendung:
let subject = Subject()
let observer1 = ConcreteObserver()
subject.attach(observer: observer1)
subject.setState("Neuer Zustand")

Dieser Ansatz ermöglicht es Objekten, sich zu abonnieren und Benachrichtigungen über Änderungen zu erhalten, ohne eine enge Verbindung zwischen ihnen.