观察者模式也可以叫发布订阅模式,观察者有的时候不一定能准备表达观察者模式,主要包括订阅者和发布者,状态事件处理,关系类图如下所示:
主题对象(Subject) 表示也可以称之为发布者,可以添加观察者,删除观察者.
观察者对象(Observer) 也称之为订阅者,订阅观察对象,如果观察对象发生变更,观察者对象状态也会随之响应.
iOS中观察者模式最常见的是NSNotification,可以按照类图自定义观察中心,观察者对象.
主题对象定义:
<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>
观察者对象:
<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("学习更新了---\(data)")
}
}`</code></pre>
测试代码:
<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>