《Head First 設計模式》
1.觀察者模式:定義了對象之間的一對多依賴,這樣一來,當一個(主題)對象改變狀態時,它的所有依賴都會收到通知並自動更新。
我喜歡看報紙,於是我訂閱了《人民日報》。那麼,《人民日報》每次的新聞都會告訴我(誰讓我買了報那)。
a. 這個報社不僅僅我一個人訂閱。(報社與我(對象之間)是一對多的依賴)。
b.報社每天的更新信息(一個(主題)對象改變了狀態)。
c.報社把信息發給每個人訂閱的人,這樣訂閱的人就可以更新時事(它的所有依賴都會收到通知並自動更新)。
現在很清晰了,把《人民日報》看做主題,我(以及其他訂閱報紙的人)就是觀察者。作為觀察者,我不需要了解《人民日報》出版社的信息(主題的具體信息)。
我就知道《人民日報》更新了信息會告訴我。《人民日報》出版社也沒心思了解我,他就知道有一個人訂閱了該報,然後發行報紙的時候給我一份就可以了。
設計原則:找出程序中變化的方面,然後將其和固定不變的方面相分離。
我和《人民日報》是一種十分松散的耦合。假如我不再訂閱《人民日報》,他也不需要修改內容(觀察者放棄觀察這個主題,主題也不需要修改代碼去針對該觀察者)。
《人民日報》只不過知道有個人不再訂閱,以後不用發報紙給他了(主題把記錄的觀察者對象刪除)。
主題的內容發生改變的時候,不需要修改觀察者。觀察者的數量等發生改變的時候,不需要修改主題。
設計原則:針對接口編程,而非針對實現編程。
把觀察者統一實現一個接口,主題只需要向該接口實現內容,而不需要面向每個觀察者。
訂閱的人太多了,要是能統一管理就好了。於是,有了報刊(接口),出版社只需要針對報刊發布報紙就可以了,不需要繁瑣的向每個人發報。(該例可能不太好)
小結: