日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式-观察者模式 实现

發布時間:2025/5/22 asp.net 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式-观察者模式 实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

觀察者模式:

  已一對多的方式,通過制定一個主題,使多個不同的訂閱者能時時的接收到最新的消息。

?  注意.觀察者模式的通知次序是不被依賴的,若你需要明確通知次序或者對通知的順序有強烈的要求那么請酌情使用該模式。

定義一個主題:

?

主題中處理基本的添加/刪除 訂閱者? 消息發布 還加入一個change鎖? 可以負責消息發布的控制,將靈活的控制消息的發布,減少不必要的消息傳播。

消息的發布主要是依靠接口的特性傳播,通過實現一個訂閱者接口來設定訂閱者,主題不需要具體的訂閱者是誰,只需要在消息更新時對這個接口的所有實現發布即可。

?

public interface Subjects {void add(Object obj);void remove(Object obj);void notifyObserver();void setMessage(String msg);void setChange();} View Code

?

public class Subject implements Subjects{private ArrayList<Object> observers;private String message;private boolean lock;public Subject() {observers = new ArrayList<>();}@Overridepublic void add(Object obj) {observers.add(obj);}@Overridepublic void remove(Object obj) {int i = observers.indexOf(obj);if (i > 0) {observers.remove(obj);}}@Overridepublic void notifyObserver() {if (lock) {for (int i = 0; i < observers.size(); i++) {Observers observer = (Observers)observers.get(i);observer.update(message);}lock = false;}}public void change() {setChange();notifyObserver();}@Overridepublic void setMessage(String msg) {this.message = msg;change();}@Overridepublic void setChange() {lock = true;} } View Code

?

訂閱者

 主題消息的發布與訂閱者之間有個共同的方法,通過這個方法訂閱者來接受發布出來的消息。 單純的實現訂閱接口但是不重寫方法而是自己編寫另一個方法就無法實現消息的接收了。

public interface Observers {public void update (String message); }

 

public class Observer implements Observers{public Observer(Subject s) {s.add(this);}//被動訂閱 @Overridepublic void update(String message) {System.out.println("訂閱主題發布的消息:" + message);}//主動拉取//像固定的主題索取消息public void updateActive(Subjects sb) {if (sb instanceof Subject) {System.out.println("訂閱者主動向主題拉取數據");}}} View Code

?

  

?另外java提供了Observer和Observable現成的api可供我們直接使用,setchange的想法也是參考這api的。

雖然說java提供了線程的api類供我們直接使用,但是java提供的observable 是一個實體類 并不是接口,設計原則是針對接口變成,但是java提供的實體類破壞了這個原則。

并且java無法實現多重繼承,這樣就導致一個子類想公用observable的功能和其他某些超類的功能是就會出現沖突,必須要舍棄一部分。所以通過自己開發的接口可以大大提高靈活度。

而且通過上訴代碼應該能自己體驗整個流程。所以在正真學會這個模式之后還是推薦自己編寫,這樣不管是拓展還是修改都很方便!!!

轉載于:https://www.cnblogs.com/culushitai/p/8487047.html

總結

以上是生活随笔為你收集整理的设计模式-观察者模式 实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。