摘要:簡介觀察者模式是行為型模式的一種,它定義了對象之間一種一對多的依賴關(guān)系,當(dāng)一個對象發(fā)生改變時,依賴它的所有對象會被通知并且自動更新,它符合對象之間松耦合的設(shè)計原則。具體觀察者各自實現(xiàn)接口方法,可以及時得到通知并更新。
1. 簡介
??觀察者模式(Observer)是行為型模式的一種,它定義了對象之間一種一對多的依賴關(guān)系,當(dāng)一個對象發(fā)生改變時,依賴它的所有對象會被通知并且自動更新,它符合對象之間松耦合的設(shè)計原則。
2. UML類圖??Subject也就是被觀者擁有所有觀察者的引用,提供一個注冊觀察者與刪除觀察者的方法以及通知所有觀察者更新的方法。Observer是觀察者接口,為所有觀察者定義了一個方法,用于主題改變時更新自己。具體觀察者各自實現(xiàn)Observer接口方法,可以及時得到通知并更新。
3. 實例Observe接口:
public interface Observer { void update(); }
具體觀察者:
public class ConcreteObserverA implements Observer { public void update() { System.out.println("觀察者A更新成功!"); } } public class ConcreteObserverB implements Observer { public void update() { System.out.println("觀察者B更新成功!"); } } public class ConcreteObserverC implements Observer { public void update() { System.out.println("觀察者C更新成功!"); } }
Subject類:
public interface Subject { void registerObserver(Observer observer); void removeObserver(Observer observer); void notifyObserver(Observer observer); }
具體Subject類:
public class ConcreteSubject implements Subject { private Listobservers; public ConcreteSubject() { this.observers = new ArrayList (); } public void registerObserver(Observer observer) { this.observers.add(observers); } public void removeObserver(Observer observer) { if (!observers.isEmpty()) { observers.remove(observer); } } public void notifyObserver() { for (Observer observer : this.observers) { observer.update(); } } }
測試:
public class Test { public static void main(String[] args) { Subject subject = new ConcreteSubject(); Observer observerA = new ConcreteObserverA(); Observer observerB = new ConcreteObserverB(); Observer observerC = new ConcreteObserverC(); //注冊觀察者 subject.registerObserver(observerA); subject.registerObserver(observerB); subject.registerObserver(observerC); //通知更新 subject.notifyObserver(); //刪除觀察者 subject.removeObserver(observerC); //通知更新 subject.notifyObserver(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71573.html
摘要:關(guān)鍵概念理解觀察者設(shè)計模式中主要區(qū)分兩個概念觀察者指觀察者對象,也就是消息的訂閱者被觀察者指要觀察的目標對象,也就是消息的發(fā)布者。 原文首發(fā)于微信公眾號:jzman-blog,歡迎關(guān)注交流! 最近補一下設(shè)計模式相關(guān)的知識,關(guān)于觀察者設(shè)計模式主要從以下幾個方面來學(xué)習(xí),具體如下: 什么是觀察者設(shè)計模式 關(guān)鍵概念理解 通知觀察者的方式 觀察者模式的實現(xiàn) 觀察者模式的優(yōu)缺點 使用場景 下面...
摘要:觀察者模式與發(fā)布訂閱的區(qū)別在模式中,知道,同時還保留了的記錄。發(fā)布者訂閱者在大多情況下是異步方式使用消息隊列。圖片源于網(wǎng)絡(luò)侵權(quán)必刪如果以結(jié)構(gòu)來分辨模式,發(fā)布訂閱模式相比觀察者模式多了一個中間件訂閱器,所以發(fā)布訂閱模式是不同于觀察者模式的。 學(xué)習(xí)了一段時間設(shè)計模式,當(dāng)學(xué)到觀察者模式和發(fā)布訂閱模式的時候遇到了很大的問題,這兩個模式有點類似,有點傻傻分不清楚,博客起因如此,開始對觀察者和發(fā)布...
摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個角色,還有第三個角色經(jīng)紀人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長時間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計模式在從頭學(xué)習(xí)一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個角色,還有第三個角色經(jīng)紀人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長時間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計模式在從頭學(xué)習(xí)一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:或許以前認為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。參考文章訂閱發(fā)布模式和觀察者模式真的不一樣 首選我們需要先了解兩者的定義和實現(xiàn)的方式,才能更好的區(qū)分兩者的不同點。 或許以前認為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。 訂閱發(fā)布模式 在軟件架構(gòu)中,發(fā)布-訂閱是一種消息范式,消息的發(fā)送者(稱為發(fā)布者)不會將消息直接發(fā)送給特...
摘要:觀察者模式又稱發(fā)布訂閱模式,模型視圖模式,源監(jiān)聽器模式模式或者從屬者模式。第一方法被調(diào)用之后會設(shè)置一個內(nèi)部標記變量,代表被觀察者對象的狀態(tài)發(fā)生了變化。代碼地址觀察者模式代碼自己實現(xiàn)的觀察者模式利用提供的有關(guān)觀察者模式的 概念 定義了對象之間的一對多依賴,當(dāng)一個對象狀態(tài)改變時,它的所有依賴者都會收到通知并自動更新。觀察者模式又稱發(fā)布(Publish/Subscribe)訂閱模式,模型視圖...
閱讀 2937·2021-11-23 09:51
閱讀 3109·2021-11-15 11:39
閱讀 2992·2021-11-09 09:47
閱讀 2538·2019-08-30 13:49
閱讀 2122·2019-08-30 13:09
閱讀 3107·2019-08-29 16:10
閱讀 3511·2019-08-26 17:04
閱讀 998·2019-08-26 13:57