摘要:描述多個對象對某一個主題感興趣,當主題變化時,所有對這主題感興趣的對象都能收到通知場景很多用戶都訂閱一篇新聞,當這篇新聞有變化時,訂閱的用戶都能收到通知實現抽象一個觀察者,它可以根據訂閱的主題和狀態值進行后續操作定義讀者觀察者收到主題的值改
描述:多個對象對某一個主題感興趣,當主題變化時,所有對這主題感興趣的對象都能收到通知
場景:很多用戶都訂閱一篇新聞,當這篇新聞有變化時,訂閱的用戶都能收到通知
實現:
抽象一個觀察者,它可以根據訂閱的主題和狀態值進行后續操作
interface Observer { void update(Subject subject, int val); }
定義讀者1
class ObserverOne implements Observer { @Override public void update(Subject subject, int val) { System.out.println(String.format("觀察者1收到主題[%s]的值改變為[%d]", subject.toString(), val)); } }
定義讀者2
class ObserverTwo implements Observer { @Override public void update(Subject subject, int val) { System.out.println(String.format("觀察者2收到主題[%s]的值改變為[%d]", subject.toString(), val)); } }
抽象一個主題
abstract class Subject { private Listobservers = new ArrayList (); void register(Observer observer) { this.observers.add(observer); } void remove(Observer observer) { this.observers.remove(observer); } void notify(int val) { for(Observer o : observers) { o.update(this, val); } }; }
定義一個新聞,讀者1、2可以對其訂閱
class NewsSubject extends Subject { String name; int val; NewsSubject(String name, int val) { this.name = name; this.val = val; } void change(int val) { int rawVal = this.val; this.val = val; System.out.println(String.format("[%s]的狀態由[%d]變為[%d]",name, rawVal, val)); notify(val); } @Override public String toString() { return name; } }
讀者1、2訂閱了一條新聞,當新聞變動了,比如有新評論了,讀者1,2都能收到通知
public class ObserverDemo { public static void main(String[] args) { Observer observerOne = new ObserverOne(); Observer observerTwo = new ObserverTwo(); NewsSubject subject = new NewsSubject("新聞", 1); subject.register(observerOne); subject.register(observerTwo); subject.change(10); subject.change(20); } }
打印結果:
[新聞]的狀態由[1]變為[10]
觀察者1收到主題[新聞]的值改變為[10]
觀察者2收到主題[新聞]的值改變為[10]
[新聞]的狀態由[10]變為[20]
觀察者1收到主題[新聞]的值改變為[20]
觀察者2收到主題[新聞]的值改變為[20]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64011.html
摘要:關鍵概念理解觀察者設計模式中主要區分兩個概念觀察者指觀察者對象,也就是消息的訂閱者被觀察者指要觀察的目標對象,也就是消息的發布者。 原文首發于微信公眾號:jzman-blog,歡迎關注交流! 最近補一下設計模式相關的知識,關于觀察者設計模式主要從以下幾個方面來學習,具體如下: 什么是觀察者設計模式 關鍵概念理解 通知觀察者的方式 觀察者模式的實現 觀察者模式的優缺點 使用場景 下面...
摘要:觀察者模式與發布訂閱的區別在模式中,知道,同時還保留了的記錄。發布者訂閱者在大多情況下是異步方式使用消息隊列。圖片源于網絡侵權必刪如果以結構來分辨模式,發布訂閱模式相比觀察者模式多了一個中間件訂閱器,所以發布訂閱模式是不同于觀察者模式的。 學習了一段時間設計模式,當學到觀察者模式和發布訂閱模式的時候遇到了很大的問題,這兩個模式有點類似,有點傻傻分不清楚,博客起因如此,開始對觀察者和發布...
摘要:總結一下從表面上看觀察者模式里,只有兩個角色觀察者被觀察者而發布訂閱模式,卻不僅僅只有發布者和訂閱者兩個角色,還有第三個角色經紀人存在。參考鏈接觀察者模式發布訂閱模式 做了這么長時間的 菜鳥程序員 ,我好像還沒有寫過一篇關于設計模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設計模式在從頭學習一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:總結一下從表面上看觀察者模式里,只有兩個角色觀察者被觀察者而發布訂閱模式,卻不僅僅只有發布者和訂閱者兩個角色,還有第三個角色經紀人存在。參考鏈接觀察者模式發布訂閱模式 做了這么長時間的 菜鳥程序員 ,我好像還沒有寫過一篇關于設計模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設計模式在從頭學習一遍,不然都對不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...
摘要:或許以前認為訂閱發布模式是觀察者模式的一種別稱,但是發展至今,概念已經有了不少區別。參考文章訂閱發布模式和觀察者模式真的不一樣 首選我們需要先了解兩者的定義和實現的方式,才能更好的區分兩者的不同點。 或許以前認為訂閱發布模式是觀察者模式的一種別稱,但是發展至今,概念已經有了不少區別。 訂閱發布模式 在軟件架構中,發布-訂閱是一種消息范式,消息的發送者(稱為發布者)不會將消息直接發送給特...
摘要:為了幫助灰太狼擺脫被老婆平底鍋抽的悲劇,發起了解救灰太狼的行動,必須要知道觀察者模式。持有觀察者對象的集合。設計模式源碼下載 相信大家都有看過《喜洋洋與灰太狼》,說的是灰太狼和羊族的斗爭,而每次的結果都是灰太狼一飛沖天,伴隨著一句我還會回來的......。為灰太狼感到悲哀,抓不到羊,在家也被老婆平底鍋虐待。灰太狼為什么會這么背? 很簡單,灰太狼本身就有暴露行蹤的屬性,羊咩咩就能知曉灰太...
閱讀 999·2019-08-30 15:55
閱讀 3440·2019-08-30 13:10
閱讀 1268·2019-08-29 18:45
閱讀 2347·2019-08-29 16:25
閱讀 2107·2019-08-29 15:13
閱讀 2423·2019-08-29 11:29
閱讀 553·2019-08-26 17:34
閱讀 1486·2019-08-26 13:57