Swift World:设计模式-观察者
在开发iOS应用程序时,也许您将使用键值观察(KVO)来帮助一个对象观察另一个对象的状态变化。 这是观察者模式的一个例子。 如果您想了解更多有关它的信息,那么官方编程指南和objc.io的这篇文章都是不错的参考。
如下图所示,这种模式既有主体又有观察者。 主题是要观察的目标。 它包含观察者实例,并将有关更改的信息通知他们。 观察者会收到通知并处理更改。 逻辑很清楚。
让我们编写代码。 作为观察者,它只会在收到通知时打印一些信息。
protocol Observer {
func update ()
}
class ConcreteObserver : Observer {
var id: String
init (id: String ) {
self. id = id
}
func update () {
print (id + " observered the subject's state was changed.")
}
}
正如我们提到的,主题有一个观察者列表,并在状态改变时通知每个观察者。
class Subject {
var observers: [ Observer ] = []
var state: String {
didSet {
notify ()
}
}
init (state: String ) {
self. state = state
}
func attach (observer: Observer ) {
observers .append (observer)
}
func notify () {
for observer in observers {
observer .update ()
}
}
}
让我们看看如何使用它。
//usage
let subject = Subject (state: "initial state")
let observerA = ConcreteObserver (id: "A")
let observerB = ConcreteObserver (id: "B")
subject .attach (observer: observerA)
subject .attach (observer: observerB)
subject . state = "new state"