觀察者模式手動實現與講解

2021-08-21 19:43:20 字數 2338 閱讀 2903

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...