經典的一種觀察者模式實現

2021-09-30 08:13:48 字數 563 閱讀 3785

為你的類class target設計乙個觀察者基類class observer,同時設計乙個觀察者容器:

typedef std::listobserver_list;

再為observer設計一系列的虛函式,表示事件處理函式,在某一事件發生時,對容器內的所有觀察者呼叫一次該處理函式。

如果在lua裡就會更簡單,lua的函式也是一種值,通常函式名其實就是該值的乙個字串key,類似觀察者模式,可以用通用的方法去做,類似windows訊息處理,可是會更簡單。

為每一種事件起乙個名字,放在乙個事件容器裡,key是事件名,value是乙個表,表裡就是所有的觀察者事件處理函式

[ 事件, 事件處理容器 ]

當事件發生時,只要把對應所有觀察者的處理函式全部調一遍就ok了。

這裡會隱含乙個bug,通常註冊事件,和刪除事件會在執行時做(lua基本上沒有非執行時的概念),所以有可能在乙個事件處理迴圈中,調到刪除它本身事件的操作(或者前乙個,或者下乙個),程式的正確性取決於lua的實現,通常會崩潰。(解決這個問題的乙個做法是引用計數,對深一層的呼叫對資源進行引用計數加一,這樣能使得資源的真正釋放時機會在最外層呼叫中)

觀察者模式實現

公升級觀察者 var observer function 定義介面 return else trigger方法用於觸發觀察者物件中的事件 type 要觸發的事件名稱 trigger用於觸發觀察者物件中的事件 trigger function type,val off方法用於移除某個事件 off fu...

經典設計模式之觀察者模式

在物件之間定義了一對多的依賴,這樣一來,當乙個物件改變狀態,依賴它的物件會收到通知並自動更新。其實就是發布訂閱模式,發布者發布資訊,訂閱者獲取資訊,訂閱了就能收到資訊,沒訂閱就收不到資訊。zookeeper事件通知節點 訊息訂閱通知 安卓開發事件註冊 分布式配置中心等等 抽象被觀察者角色 也就是乙個...

PHP實現觀察者模式

特點 觀察者模式定義物件的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知並自動更新 觀察者模式利用 組合 將許多觀察者組合進主題中。物件 觀察者 主題 之間的這種關係不是通過繼承產生的,而是在執行時利用組合的方式產生的。多用組合,少用繼承!觀察者模式的優點和缺點 觀察者模式的...