輕松掌握Java觀察者模式
定義:當(dāng)對象間存在一對多關(guān)系時,則使用觀察者模式(Observer Pattern)。比如,當(dāng)一個對象被修改時,則會自動通知它的依賴對象。
特點:
1、觀察者和被觀察者是抽象耦合的。
2、建立一套觸發(fā)機制。
企業(yè)級開發(fā)和常用框架中的應(yīng)用:Java自帶觀察者類,servlet中的filter,分布式的消息隊列
實例:
public class Demo { public static void main(String[] args) { ActualSubject subject = new ActualSubject(); ObserverA o1 = new ObserverA(); ObserverA o2 = new ObserverA(); ObserverA o3 = new ObserverA(); //訂閱消息 subject.addObserver(o1); subject.addObserver(o2); subject.addObserver(o3); subject.setNews("今天天氣真好"); } } /** * 觀察者接口 */ interface Observer{ public void update(Subject subject); } /** * 目標(biāo)對象,廣播對象 */ class Subject{ private List<Observer> list = new ArrayList<>(); public void addObserver(Observer o){ list.add(o); } public void removeObserver(Observer o){ list.remove(o); } public void notifyAllObserver(){ for(Observer o:list){ o.update(this); } } } class ActualSubject extends Subject{ private String news; public void setNews(String news) { this.news = news; System.out.println("我是廣播,我發(fā)出了一個消息"); notifyAllObserver(); } public String getNews() { return news; } } class ObserverA implements Observer{ private String news; public void update(Subject subject) { setNews(((ActualSubject)subject).getNews()); System.out.println("我是觀察者,我接收到一個我訂閱的廣播發(fā)出的消息,接下來我要做出響應(yīng)的操作"); System.out.println(getNews()); } public String getNews() { return news; } public void setNews(String news) { this.news = news; } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java 設(shè)計模式之State(狀態(tài)模式)
這篇文章主要介紹了java 設(shè)計模式之State(狀態(tài)模式)的相關(guān)資料,一個類的行為基于它的狀態(tài)的改變而改變。狀態(tài)模式歸屬于行為型模式,需要的朋友可以參考下2017-08-08spring boot application properties配置實例代碼詳解
本文通過代碼給大家介紹了spring boot application properties配置方法,需要的的朋友參考下吧2017-07-07帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-08-08詳解SpringBoot是如何整合SpringDataRedis的?
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著SpringBoot是如何整合SpringDataRedis展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06Spring Boot與Spark、Cassandra系統(tǒng)集成開發(fā)示例
本文演示以Spark作為分析引擎,Cassandra作為數(shù)據(jù)存儲,而使用Spring Boot來開發(fā)驅(qū)動程序的示例。對spring boot 與spark cassandra集成開發(fā)示例代碼感興趣的朋友跟著腳本之家小編一起學(xué)習(xí)吧2018-02-02關(guān)于@Scheduled參數(shù)及cron表達式解釋
這篇文章主要介紹了關(guān)于@Scheduled參數(shù)及cron表達式解釋,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關(guān)路由的詳細搭建
這篇文章主要介紹了SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關(guān)路由,本文通過圖文實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08