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"