摘要:簡介觀察者模式是行為型模式的一種,它定義了對象之間一種一對多的依賴關(guān)系,當(dāng)一個(gè)對象發(fā)生改變時(shí),依賴它的所有對象會(huì)被通知并且自動(dòng)更新,它符合對象之間松耦合的設(shè)計(jì)原則。具體觀察者各自實(shí)現(xiàn)接口方法,可以及時(shí)得到通知并更新。
1. 簡介
??觀察者模式(Observer)是行為型模式的一種,它定義了對象之間一種一對多的依賴關(guān)系,當(dāng)一個(gè)對象發(fā)生改變時(shí),依賴它的所有對象會(huì)被通知并且自動(dòng)更新,它符合對象之間松耦合的設(shè)計(jì)原則。
2. UML類圖??Subject也就是被觀者擁有所有觀察者的引用,提供一個(gè)注冊觀察者與刪除觀察者的方法以及通知所有觀察者更新的方法。Observer是觀察者接口,為所有觀察者定義了一個(gè)方法,用于主題改變時(shí)更新自己。具體觀察者各自實(shí)現(xiàn)Observer接口方法,可以及時(shí)得到通知并更新。
3. 實(shí)例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://specialneedsforspecialkids.com/yun/71573.html
摘要:關(guān)鍵概念理解觀察者設(shè)計(jì)模式中主要區(qū)分兩個(gè)概念觀察者指觀察者對象,也就是消息的訂閱者被觀察者指要觀察的目標(biāo)對象,也就是消息的發(fā)布者。 原文首發(fā)于微信公眾號:jzman-blog,歡迎關(guān)注交流! 最近補(bǔ)一下設(shè)計(jì)模式相關(guān)的知識,關(guān)于觀察者設(shè)計(jì)模式主要從以下幾個(gè)方面來學(xué)習(xí),具體如下: 什么是觀察者設(shè)計(jì)模式 關(guān)鍵概念理解 通知觀察者的方式 觀察者模式的實(shí)現(xiàn) 觀察者模式的優(yōu)缺點(diǎn) 使用場景 下面...
摘要:觀察者模式與發(fā)布訂閱的區(qū)別在模式中,知道,同時(shí)還保留了的記錄。發(fā)布者訂閱者在大多情況下是異步方式使用消息隊(duì)列。圖片源于網(wǎng)絡(luò)侵權(quán)必刪如果以結(jié)構(gòu)來分辨模式,發(fā)布訂閱模式相比觀察者模式多了一個(gè)中間件訂閱器,所以發(fā)布訂閱模式是不同于觀察者模式的。 學(xué)習(xí)了一段時(shí)間設(shè)計(jì)模式,當(dāng)學(xué)到觀察者模式和發(fā)布訂閱模式的時(shí)候遇到了很大的問題,這兩個(gè)模式有點(diǎn)類似,有點(diǎn)傻傻分不清楚,博客起因如此,開始對觀察者和發(fā)布...
摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個(gè)角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個(gè)角色,還有第三個(gè)角色經(jīng)紀(jì)人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長時(shí)間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計(jì)模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計(jì)模式在從頭學(xué)習(xí)一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個(gè)角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個(gè)角色,還有第三個(gè)角色經(jīng)紀(jì)人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長時(shí)間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計(jì)模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計(jì)模式在從頭學(xué)習(xí)一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:或許以前認(rèn)為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。參考文章訂閱發(fā)布模式和觀察者模式真的不一樣 首選我們需要先了解兩者的定義和實(shí)現(xiàn)的方式,才能更好的區(qū)分兩者的不同點(diǎn)。 或許以前認(rèn)為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。 訂閱發(fā)布模式 在軟件架構(gòu)中,發(fā)布-訂閱是一種消息范式,消息的發(fā)送者(稱為發(fā)布者)不會(huì)將消息直接發(fā)送給特...
摘要:觀察者模式又稱發(fā)布訂閱模式,模型視圖模式,源監(jiān)聽器模式模式或者從屬者模式。第一方法被調(diào)用之后會(huì)設(shè)置一個(gè)內(nèi)部標(biāo)記變量,代表被觀察者對象的狀態(tài)發(fā)生了變化。代碼地址觀察者模式代碼自己實(shí)現(xiàn)的觀察者模式利用提供的有關(guān)觀察者模式的 概念 定義了對象之間的一對多依賴,當(dāng)一個(gè)對象狀態(tài)改變時(shí),它的所有依賴者都會(huì)收到通知并自動(dòng)更新。觀察者模式又稱發(fā)布(Publish/Subscribe)訂閱模式,模型視圖...
閱讀 2924·2021-11-23 09:51
閱讀 3099·2021-11-15 11:39
閱讀 2979·2021-11-09 09:47
閱讀 2527·2019-08-30 13:49
閱讀 2113·2019-08-30 13:09
閱讀 3092·2019-08-29 16:10
閱讀 3504·2019-08-26 17:04
閱讀 984·2019-08-26 13:57