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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

常用的设计模式——观察者设计模式?和发布者-订阅者设计模式的区别

發布時間:2025/3/19 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 常用的设计模式——观察者设计模式?和发布者-订阅者设计模式的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 觀察者設計模式

觀察者把自己“綁定”至目標,當目標發生變化時,目標“通知”觀察者,然后觀察者進行相應操作。你有沒有覺得這種設計模式更像發布-訂閱設計模式?其實這種設計模式和發布-訂閱模式最大的區別就是觀察者模式是目標發生變化,目標直接“通知”觀察者;而發布-訂閱模式中發布者和訂閱者之間并沒有直接聯系,中間通過“消息中心”連接。

?

3. 代碼實現

3.1 目標類和觀察者接口代碼如下。

3.2 觀察者兩個實現類:StringObserverImpl和IntegerObserverImpl,代碼如下。

3.3 測試類及運行結果如下。

?

?

附錄:代碼

package observer;import java.util.ArrayList;public class Goal {private Object msg;private final ArrayList<Observer> observers = new ArrayList<>();public Object getMsg() {return msg;}public void notify(Object msg) {this.msg = msg;// 目標發送消息時,調用觀察者的方法(相當于通知觀察者),觀察者根據消息執行相應操作for(Observer ob: observers){ob.execute();}}public ArrayList<Observer> getObservers() {return observers;} }package observer;public interface Observer {void observer(Goal goal);void execute(); }package observer;public class StringObserverImpl implements Observer {private Goal goal;@Overridepublic void observer(Goal goal) {this.goal = goal;// 當前觀察者觀察了當前目標,之后目標要向觀察者發送通知,// 所以要將當前觀察者加入目標的觀察者列表中this.goal.getObservers().add(this);}@Overridepublic void execute() {// 不同觀察者接收不同的消息if(goal.getMsg() instanceof String){System.out.println("StringObserverImpl recive " + goal.getMsg());}} }package observer;public class IntegerObserverImpl implements Observer {private Goal goal;@Overridepublic void observer(Goal goal) {this.goal = goal;this.goal.getObservers().add(this);}@Overridepublic void execute() {if(goal.getMsg() instanceof Integer){System.out.println("IntegerObserverImpl recive " + goal.getMsg());}} }package observer;public class ObserverTest {public static void main(String[] args) {// 創建String消息觀察者和Integer消息觀察者以及目標StringObserverImpl stringObserver = new StringObserverImpl();IntegerObserverImpl integerObserver = new IntegerObserverImpl();Goal goal = new Goal();// 讓String觀察者和Integer觀察者觀察目標goalstringObserver.observer(goal);integerObserver.observer(goal);// 目標分別發送兩種類型消息goal.notify("abc");goal.notify(123);} }

?

總結

以上是生活随笔為你收集整理的常用的设计模式——观察者设计模式?和发布者-订阅者设计模式的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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