Java常用设计模式——观察者模式
生活随笔
收集整理的這篇文章主要介紹了
Java常用设计模式——观察者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
導航
- 一、行為描述
- 二、角色關系
- 三、代碼示例
一、行為描述
觀察者會觀察特定對象的狀態變化,一旦狀態有所變化或產生特定條件,被觀察對象會通知給觀察者,
而觀察者則會依據通知信息采取特定處理措施。
舉個例子,公司接到了一個大項目,各個部門都在觀察項目的進度,一旦洽談成功,項目正式進入啟動階段,
那么設計部就會出圖紙,開發部就會出流程、出架構,售前部就會跑現場實地勘測…
項目就是被觀察者,而各個部門就是觀察者。
二、角色關系
觀察者模式就兩種角色——觀察者和被觀察者。
觀察者對象往往會規范結構,一般是繼承一個抽象觀察者。
I. 抽象觀察者會定義3個重要內容:
II. 子類觀察者僅調用父類構造,并實現通知函數即可。
III. 被觀察者需要定義 4 個重要內容:
三、代碼示例
抽象觀察者:
/*** 觀察者*/ @Data public abstract class Observer {/*** 被觀察對象*/protected ObserveTarget target;/*** 構造觀察者時,直接建立觀察者與被觀察者的關系*/public Observer(ObserveTarget target) {this.target = target;target.getObservers().add(this);}/*** 接收廣播消息*/abstract void recvMsg(); }觀察者1、觀察者2:
/*** 觀察者1號*/ public class Observer1 extends Observer {public Observer1(ObserveTarget target) {super(target);}@Overridevoid recvMsg() {System.out.println("Observer1-state = " + target.getState());} } /*** 觀察者2號*/ public class Observer2 extends Observer {public Observer2(ObserveTarget target) {super(target);}@Overridevoid recvMsg() {// 觀察者可以視情況選擇性處理接收的消息if (target.getState() == 1)System.out.println("Observer2-state = " + target.getState());} }被觀察者:
/*** 被觀察目標*/ @Data public class ObserveTarget {/*** 狀態變量*/private volatile int state;/*** 觀察席(觀察者容器)*/private Collection<Observer> observers = new ArrayList<>();/*** 入席函數(新增觀察者)*/public void addObserver(Observer observer) {observers.add(observer);}public void setState(int state) {this.state = state;// 發送廣播通知broadcast();}/*** 廣播函數*/private void broadcast() {observers.forEach(o -> o.recvMsg());} }測試代碼:
public class TestObserve {public static void main(String[] args) {ObserveTarget target = new ObserveTarget();Observer1 observer1 = new Observer1(target);Observer2 observer2 = new Observer2(target);target.setState(1);target.setState(2);target.setState(3);} } // output: Observer1-state = 1 Observer2-state = 1 Observer1-state = 2 Observer1-state = 3總結
以上是生活随笔為你收集整理的Java常用设计模式——观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dijkstra算法_最短路径问题——迪
- 下一篇: 简述python爬虫_python爬虫入