해당 예제는 Combine Framework, NotificationCenter로 구현할 수도 있다.

protocol Observer {
		var id: String { get set }
		func update(message: String)
}
protocol Publisher {
		var observers: [Observer] { get set }

		func subscribe(observer: Observer)
		func unSubscribe(observer: Observer)
		func notify(message: String)
}
class AppleStore: Publisher {
		var observers: [Observer]

		init(observers: [Observer]) {
		        self.observers = observers
	  }
		 
		func subscribe(observer: Observer) {
        self.observers.append(observer)
    }
    
    func unSubscribe(observer: Observer) {
        if let index = self.observers.firstIndex(where: { $0.id == observer.id }) {
            self.observers.remove(at: index)
        }
    }
    
    func notify(message: String) {
        for observer in observers {
            observer.update(message: message)
        }
    }		
}
// Concrete Observer(Subscriber)
class Customer: Observer {
    var id: String
    init(id: String) {
        self.id = id
    }
    func update(message: String) {
        print("\\(id)님 \\(message)수신\\n")
    }
}
let appleStore = AppleStore(observers: [])
let derrick = Customer(id: "Derrick")
let 웡빙 = Customer(id: "웡빙")
let 핀 = Customer(id: "핀")

appleStore.subscribe(observer: derrick)
appleStore.subscribe(observer: 웡빙)

appleStore.notify(message: "iPhoen 15 입고!")

apple.unSubscribe(observer: 웡빙)
appleStore.notify(message: "iPad Pro 입고!")

// Derrick님 iPhone 15 입고! 수신
// 웡빙님 iPhone 15 입고! 수신

// Derrick님 iPad Pro 입고! 수신