觀察者模式也可以叫發(fā)布訂閱模式,觀察者有的時(shí)候不一定能準(zhǔn)備表達(dá)觀察者模式蛤织,主要包括訂閱者和發(fā)布者,狀態(tài)事件處理,關(guān)系類圖如下所示:
觀察者模式.png
主題對(duì)象(Subject) 表示也可以稱之為發(fā)布者儿礼,可以添加觀察者,刪除觀察者.
觀察者對(duì)象(Observer) 也稱之為訂閱者庆寺,訂閱觀察對(duì)象蚊夫,如果觀察對(duì)象發(fā)生變更,觀察者對(duì)象狀態(tài)也會(huì)隨之響應(yīng).
iOS中觀察者模式最常見(jiàn)的是NSNotification,可以按照類圖自定義觀察中心懦尝,觀察者對(duì)象.
主題對(duì)象定義:
<pre><code>`class ObserverCenter {
var observerMap:[String:Observer] = [:]
func addObserver(observerName:String,observer:Observer) {
observerMap[observerName] = observer
}
func deleteObserver(observerName:String) {
observerMap.removeValue(forKey: observerName)
}
func notifyObserver(data:String) {
for (_,value) in observerMap {
let observer:Observer = value
observer.updateData(data: data)
}
}
}`</code></pre>
觀察者對(duì)象:
<pre><code>`class Observer {
func updateData(data:String) {}
}
class CourseObserver: Observer {
override func updateData(data: String) {
print("課程更新了---\(data)")
}
}
class StudyObserver: Observer {
override func updateData(data: String) {
print("學(xué)習(xí)更新了---\(data)")
}
}`</code></pre>
測(cè)試代碼:
<pre><code>` let observerCenter:ObserverCenter = ObserverCenter()
let courseObserver:CourseObserver = CourseObserver()
observerCenter.addObserver(observerName: "Course", observer: courseObserver)
let studentObserver:StudyObserver = StudyObserver()
observerCenter.addObserver(observerName: "Student", observer: studentObserver)
observerCenter.notifyObserver(data: "FlyElephant")`</code></pre>