在這裏先講壹下面向對象設計的壹個重要原則——單壹職責原則。因此系統的每個對象應該將重點放在問題域中的離散抽象上。因此理想的情況下,壹個對象只做壹件事情。這樣在開發中也就帶來了諸多的好處:提供了重用性和維護性,也是進行重構的良好的基礎。
因此幾乎所有的設計模式都是基於這個基本的設計原則來的。觀察者模式的起源我覺得應該是在GUI和業務數據的處理上,因為現在絕大多數講解觀察者模式的例子都是這壹題材。但是觀察者模式的應用決不僅限於此壹方面。
下面我們就來看看觀察者模式的組成部分。
1) 抽象目標角色(Subject):目標角色知道它的觀察者,可以有任意多個觀察者觀察同壹個目標。並且提供註冊和刪除觀察者對象的接口。目標角色往往由抽象類或者接口來實現。
2) 抽象觀察者角色(Observer):為那些在目標發生改變時需要獲得通知的對象定義壹個更新接口。抽象觀察者角色主要由抽象類或者接口來實現。
3) 具體目標角色(Concrete Subject):將有關狀態存入各個Concrete Observer對象。當它的狀態發生改變時, 向它的各個觀察者發出通知。
4) 具體觀察者角色(Concrete Observer):存儲有關狀態,這些狀態應與目標的狀態保持壹致。實現Observer的更新接口以使自身狀態與目標的狀態保持壹致。在本角色內也可以維護壹個指向Concrete Subject對象的引用。