23種設計模式
觀察者模式是經典設計模式中的一種,使用廣泛。
觀察者模式實現兩個耦合度較高的類解耦。
觀察者模式由觀察者和被觀察者組成;在實現中,被觀察者為主體;在作用中,觀察者為主體。(一般情況下)
觀察者模式在現實中的場景可簡單對應為:張三看見李四去吃飯了,張三也去吃飯了。
張三是觀察者,李四是被觀察者。
李四去吃飯,被觀察者的狀態改變;張三看見,被觀察者廣播通知觀察者;張三也去吃飯了,執行觀察者自身動作。
通過這個例子,可以理解到,被觀察者需要作出三件事:
被觀察者需要新增觀察者到自身廣播範圍(張三需要能看見李四);
被觀察者需要刪除觀察者從自身廣播範圍(張三有時候不要看李四去吃飯,可能不看他了);
被觀察者需要進行廣播通知範圍內的觀察者。
觀察者就只需要做一件事:
當被通知時,執行自身的動作。
接下來是實現的乙個小例子:
首先需要定義觀察者和被觀察者的行為(介面)
定義被觀察者的介面iobservered
方法addobserver(observeredpeople o)
modify(object arg)
delobserver(observeredpeople o)
public inte***ce iobservered
定義觀察者的介面iobserver
方法update()
public inte***ce iobserver
定義被觀察者的實現類
observeredpeople
public class observeredpeople implements iobservered
public observeredpeople()
@override
public boolean addobserver(iobserver o) else
} @override
public void modifyobserver(object arg)
}} changed = false;
} @override
public boolean delobserver(iobserver o) else
}}
以上這些類可以作為工具類存在,也就是說,在任何地方能夠使用到觀察者模式,這些都是相同的。
具體使用觀察者實現觀察者介面,被觀察者繼承被觀察者類。
建立乙個被觀察者
//注意導包
public class observeredusing extends observeredpeople
public string getname()
public void setname(string name)
public int getage()
public void setage(int age)
public void setdata(object arg)
}
建立2個觀察者
//注意導包
public class observerusingeat implements iobserver
@override
public void update(observeredpeople o, object arg)
}
第二個觀察者
public class observerusingplay implements iobserver
private void doplay()
@override
public void update(observeredpeople o, object arg)
}
主方法
public class main
}
執行結果
name:張三 age:32 arg:吃飯
name:李四 age:20 arg:吃飯
name:王五 age:80 arg:吃飯
開始運動
name:1號
我做跑步運動吃飯
開始運動
name:2號
我做跳運動吃飯
這個**和jdk實現的原始碼基本類似,但是jdk的是執行緒安全的,我們這個執行緒不安全。
使用觀察者模式一般使用jdk的介面和類,非常容易使用。
但是自己寫一次,理解更加深刻。
23種設計模式
觀察者模式實現
公升級觀察者 var observer function 定義介面 return else trigger方法用於觸發觀察者物件中的事件 type 要觸發的事件名稱 trigger用於觸發觀察者物件中的事件 trigger function type,val off方法用於移除某個事件 off fu...
PHP實現觀察者模式
特點 觀察者模式定義物件的一對多依賴,這樣一來,當乙個物件改變狀態時,它的所有依賴者都會收到通知並自動更新 觀察者模式利用 組合 將許多觀察者組合進主題中。物件 觀察者 主題 之間的這種關係不是通過繼承產生的,而是在執行時利用組合的方式產生的。多用組合,少用繼承!觀察者模式的優點和缺點 觀察者模式的...
C 實現觀察者模式
定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。完美的將觀察者和被觀察的物件分離開。有時又被稱為 模型 檢視 view 模式 源 收聽者 listener 模式 或為發布 訂閱模式 目標就是通知的發布者,觀察者是通知的訂閱者 接受通知 obse...