Java(发布/订阅模式)
生活随笔
收集整理的這篇文章主要介紹了
Java(发布/订阅模式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、概述
觀察者模式又稱為發布/訂閱(Publish/Subscribe)模式
觀察者設計模式涉及到兩種角色:主題(Subject)和觀察者(Observer)
(1)Subject模塊
Subjec模塊有3個主要操作
addObserver():注冊添加觀察者(申請訂閱)
deleteObserver():刪除觀察者(取消訂閱)
notifyObserver():主題狀態發生變化時通知所有的觀察者對象
(2)Oserver模塊
Oserver模塊有1個核心操作update(),當主題Subject狀態改變時,將調用每個觀察者的update()方法,更新通知。
(3)UML圖
https://www.processon.com在線畫的UML圖
2、簡單樣例
(1)主題接口
(2)觀察者接口
package observer;public interface Observer {//當主題狀態改變時,更新通知public void update(int version); }(3)主題實現類,某某雜志
package observer;import java.util.ArrayList; import java.util.List;public class MagazineSubject implements Subject{//存放訂閱者private List<Observer> observers=new ArrayList<Observer>();//期刊版本private int version;@Overridepublic void addObserver(Observer obj) {observers.add(obj);}@Overridepublic void deleteObserver(Observer obj) {int i = observers.indexOf(obj);if(i>=0){observers.remove(obj);}}@Overridepublic void notifyObserver() {for(int i=0;i<observers.size();i++){Observer o=(Observer)observers.get(i);o.update(version);}}//該雜志發行了新版本public void publish(){//新版本this.version++;//信息更新完畢,通知所有觀察者notifyObserver();} }(4)觀察者實現類
package observer;public class CustomerObserver implements Observer{//訂閱者名字private String name;private int version;public CustomerObserver(String name){this.name = name;}@Overridepublic void update(int version) {this.version=version;System.out.println("該雜志出新版本了");this.buy();}public void buy(){System.out.println(name+"購買了第"+version+"期的雜志!");}}(5)測試類
package observer;public class Main{public static void main(String[] args) {//創建主題(被觀察者)MagazineSubject magazine = new MagazineSubject();//創建三個不同的觀察者CustomerObserver a = new CustomerObserver("A");CustomerObserver b = new CustomerObserver("B");CustomerObserver c = new CustomerObserver("C");//將觀察者注冊到主題中magazine.addObserver(a);magazine.addObserver(b);magazine.addObserver(c);//更新主題的數據,當數據更新后,會自動通知所有已注冊的觀察者magazine.publish();} }執行結果
該雜志出新版本了 A購買了第1期的雜志! 該雜志出新版本了 B購買了第1期的雜志! 該雜志出新版本了 C購買了第1期的雜志!3、大數據運維平臺中的觀察者模式
總結
以上是生活随笔為你收集整理的Java(发布/订阅模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 跑马灯程序设计
- 下一篇: Java代码实现负载均衡五种算法