輕松掌握Java觀察者模式
定義:當對象間存在一對多關(guān)系時,則使用觀察者模式(Observer Pattern)。比如,當一個對象被修改時,則會自動通知它的依賴對象。
特點:
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);
}
/**
* 目標對象,廣播對象
*/
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)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MybatisPlus使用Wrapper實現(xiàn)條件查詢功能
這篇文章主要介紹了MybatisPlus使用Wrapper實現(xiàn)查詢功能,使用它可以實現(xiàn)很多復(fù)雜的查詢,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06
如何在java 8 stream表達式實現(xiàn)if/else邏輯
這篇文章主要介紹了如何在java 8 stream表達式實現(xiàn)if/else邏輯,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
Springboot項目中單元測試時注入bean失敗的解決方案
這篇文章主要介紹了Springboot項目中單元測試時注入bean失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
Java文件讀寫IO/NIO及性能比較詳細代碼及總結(jié)
這篇文章主要介紹了Java文件讀寫IO/NIO及性能比較詳細代碼及總結(jié),具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
Java基于Javafaker生成測試數(shù)據(jù)
這篇文章主要介紹了Java基于Javafaker生成測試數(shù)據(jù)的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12
IntelliJ IDEA中properties文件顯示亂碼問題的解決辦法
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA中properties文件顯示亂碼問題的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10
springboot實現(xiàn)自動郵件發(fā)送任務(wù)詳解
這篇文章主要介紹了Springboot中的郵件任務(wù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2022-04-04

