設計模式學習筆記 觀察者模式

2022-01-18 04:04:25 字數 1681 閱讀 5042

概述:

觀察者模式(oberserver):定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並自動更新。

實用性:

1.當乙個物件有兩個方面,其中乙個方面依賴於另乙個方面。將二者封裝在獨立的物件中以使他們可以各自獨立的改變和復用。

2.當乙個物件的改變需要同時改變其他物件,而不知道具體有多少物件有待改變。

3.當乙個物件必須通知其他物件,而又不能假定其他物件是誰。

類圖:

**示例:

1.定義抽象通知者

//////

抽象通知者,用抽象類或者藉口實現。把所有對觀察者物件的引用儲存在乙個聚集裡

///每個通知者都可以有任何熟練的觀察者,抽象通知者提供乙個介面,可以增加和刪除,通知觀察者物件,

///abstract

class

subject

//移除觀察者

public

void

dettach(observer observer)

//通知

public

void

notify()

}}

2.定義抽象觀察者

//////

抽象觀察者,為所有的具體觀察者定義乙個介面,

///得到通知者的通知時更新自己,這個介面叫做更新介面

///抽象觀察者一般用乙個抽象類或者乙個介面實現,更新介面一般包含乙個update方法,

///abstract

class

observer

3.定義具體觀察者

//////

具體的通知者,將有關狀態存入具體觀察者物件,在具體通知者的

///內部狀態改變時,給所有登記過的觀察者發出通知

///class

concretesubject:subject

set}

}

4.定義具體通知者

//////

具體觀察者,實現抽象觀察者的更新介面,以便本身的狀態與通知者的狀態保持

///class

concreteobserver:observer

public

override

void

update()

的新狀態是

",name,observerstate);

}public

concretesubject subject

set}

}

5.客戶端呼叫

//////

測試觀察者模式

///static

void

testobserver()

小結:觀察者模式確實看得有點蛋疼,迷糊,不知道大家有沒有這感覺,其實和委託的概念類似,應用的場合在gui應用上比較多,還有類似的訂閱服務,產品的降價通知客戶也可以考慮,但是我們都可以通過委託來更好的實現,如果找到合適的應用例子再貼上來吧

《設計模式》觀察者模式 學習筆記

元件協作 模式 現代軟體專業分工之後的第乙個結果是 框架與應用程式的劃分 元件協作 模式通過晚期繫結,來實現框架與應用程式之間的松耦合,是二者之間協作時常用的模式。典型模式 template method strategy observer event 定義物件間的一種一對多 變化 的依賴關係,以便...

學習設計模式 觀察者模式

說明 觀察者模式就是有兩個角色,乙個觀察者 乙個通知者,兩者的關係是多對一。當某個是事件觸發時,通知者通知觀察者去處理相應的事件。為了解耦合,需要將兩個角色都先抽象,然後再定義具體的實現類。缺點 需要所有觀察者處理相應事件名稱一致 需求 學生自習的時候開小差,需要代表時刻觀察老師是否來了,如果來了,...

設計模式學習 觀察者模式

定義 定義物件間一種一對多的依賴關係,使得每當乙個物件發生變化時,則所有依賴於他的物件都會得到通知並自動更新。使用場景 特點 實現物件的解耦,將觀察者和被觀察者完全隔離,只依賴於observe和observable抽象。簡單實現例子 抽象觀察者類,為所有具體觀察者定義乙個介面,在得到通知時更新自己 ...