Java(发布/订阅模式)
生活随笔
收集整理的這篇文章主要介紹了
Java(发布/订阅模式)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、概述
觀察者模式又稱為發(fā)布/訂閱(Publish/Subscribe)模式
觀察者設(shè)計模式涉及到兩種角色:主題(Subject)和觀察者(Observer)
(1)Subject模塊
Subjec模塊有3個主要操作
addObserver():注冊添加觀察者(申請訂閱)
deleteObserver():刪除觀察者(取消訂閱)
notifyObserver():主題狀態(tài)發(fā)生變化時通知所有的觀察者對象
(2)Oserver模塊
Oserver模塊有1個核心操作update(),當(dāng)主題Subject狀態(tài)改變時,將調(diào)用每個觀察者的update()方法,更新通知。
(3)UML圖
https://www.processon.com在線畫的UML圖
2、簡單樣例
(1)主題接口
(2)觀察者接口
package observer;public interface Observer {//當(dāng)主題狀態(tài)改變時,更新通知public void update(int version); }(3)主題實(shí)現(xiàn)類,某某雜志
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);}}//該雜志發(fā)行了新版本public void publish(){//新版本this.version++;//信息更新完畢,通知所有觀察者notifyObserver();} }(4)觀察者實(shí)現(xiàn)類
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) {//創(chuàng)建主題(被觀察者)MagazineSubject magazine = new MagazineSubject();//創(chuàng)建三個不同的觀察者CustomerObserver a = new CustomerObserver("A");CustomerObserver b = new CustomerObserver("B");CustomerObserver c = new CustomerObserver("C");//將觀察者注冊到主題中magazine.addObserver(a);magazine.addObserver(b);magazine.addObserver(c);//更新主題的數(shù)據(jù),當(dāng)數(shù)據(jù)更新后,會自動通知所有已注冊的觀察者magazine.publish();} }執(zhí)行結(jié)果
該雜志出新版本了 A購買了第1期的雜志! 該雜志出新版本了 B購買了第1期的雜志! 該雜志出新版本了 C購買了第1期的雜志!3、大數(shù)據(jù)運(yùn)維平臺中的觀察者模式
總結(jié)
以上是生活随笔為你收集整理的Java(发布/订阅模式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 跑马灯程序设计
- 下一篇: 参数等效模型可以用于_干货分享电池单体产