觀察者(Observer)模式:指多個對象間存在一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。這種模式有時又稱作發(fā)布-訂閱模式、模型-視圖模式,它是對象行為型模式。
觀察者模式是一種對象行為型模式,其主要優(yōu)點如下。
? ? ?降低了目標與觀察者之間的耦合關系,兩者之間是抽象耦合關系。
? ? ?目標與觀察者之間建立了一套觸發(fā)機制。
它的主要缺點如下。
? ? ?目標與觀察者之間的依賴關系并沒有完全解除,而且有可能出現(xiàn)循環(huán)引用。
? ? ?當觀察者對象很多時,通知的發(fā)布會花費很多時間,影響程序的效率。
觀察者模式的主要角色如下。
抽象主題(Subject)角色:也叫抽象目標類,它提供了一個用于保存觀察者對象的聚集類和增加、刪除觀察者對象的方法,以及通知所有觀察者的抽象方法。
具體主題(Concrete??? Subject)角色:也叫具體目標類,它實現(xiàn)抽象目標中的通知方法,當具體主題的內(nèi)部狀態(tài)發(fā)生改變時,通知所有注冊過的觀察者對象。
抽象觀察者(Observer)角色:它是一個抽象類或接口,它包含了一個更新自己的抽象方法,當接到具體主題的更改通知時被調(diào)用。
具體觀察者(Concrete Observer)角色:實現(xiàn)抽象觀察者中定義的抽象方法,以便在得到目標的更改通知時更新自身的狀態(tài)。