Sobes.tech
Junior — Middle

Hoe zou je het Observer-ontwerppatroon implementeren?

sobes.tech AI

Antwoord van AI

Het Observer-ontwerppatroon wordt gebruikt om de inschrijving van observer-objecten te organiseren voor gebeurtenissen of statuswijzigingen van een ander object (het onderwerp). Op iOS kan het op verschillende manieren worden geïmplementeerd, bijvoorbeeld via protocollen en delegates, NotificationCenter of een eigen implementatie.

Voorbeeld van een eenvoudige implementatie via een 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)")
    }
}

// Gebruik:
let subject = Subject()
let observer1 = ConcreteObserver()
subject.attach(observer: observer1)
subject.setState("Nieuwe staat")

Deze aanpak stelt objecten in staat zich te abonneren en meldingen te ontvangen over wijzigingen zonder een strakke koppeling tussen hen.