Java設(shè)計(jì)模式探究之觀察者模式詳解
1.觀察者模式是什么
顧名思義,有兩個(gè)對(duì)象,觀察者和被觀察者。當(dāng)被觀察者數(shù)據(jù)發(fā)生變化時(shí),提醒觀察者更新數(shù)據(jù)或狀態(tài)。
2.如何實(shí)現(xiàn)
1)定義兩個(gè)類,觀察者和被觀察者。
2)被觀察者要維護(hù)一個(gè)集合,存放觀察者對(duì)象。并且提供增刪方法。
3)被觀察者數(shù)據(jù)發(fā)生變化時(shí),要調(diào)用觀察者的方法,以便通知觀察者更新數(shù)據(jù)或狀態(tài)。
4)基于面向抽象原則,可以將觀察者和被觀察者中的方法提取接口中。
3.代碼實(shí)現(xiàn)
1)觀察者接口
/**
* 抽象觀察者接口
*/
public interface Observer {
/**
* 抽象方法
*/
public void uPdate();
public void remove();
}
2)被觀察者接口
/**
* 抽象被觀察者
*/
public interface Observed {
public void addObserver(Observer observer);
public void deleteObserver(Observer observer);
public void notifyObservers();
}
3)觀察者實(shí)現(xiàn)
/**
* 觀察者實(shí)現(xiàn)
*/
public class ObserverImpl implements Observer {
public ObserverImpl(){
}
@Override
public void uPdate() {
System.out.println("update....");
}
}
4)被觀察者實(shí)現(xiàn)
/**
* 觀察者實(shí)現(xiàn)
*/
public class ObserverImpl implements Observer {
public ObserverImpl(){
}
private Observed observed;
public ObserverImpl(Observed observed){
this.observed = observed;
observed.addObserver(this);
}
@Override
public void uPdate() {
System.out.println("觀察者更新數(shù)據(jù)變化....");
}
@Override
public void remove() {
if(observed!=null){
observed.deleteObserver(this);
}
}
}5)測(cè)試類
public class TestObserver {
public static void main(String args []){
ObservedImpl subject = new ObservedImpl();
ObserverImpl observer1 = new ObserverImpl(subject);
subject.notifyObservers();
}
}
4.延伸拓展
在Android的代碼中,有很多地方用到了觀察者模式。
Android的廣播機(jī)制,就是采用的觀察者模式。
我們創(chuàng)建一個(gè)廣播接收者,來接收系統(tǒng)廣播。在Android源碼中,其實(shí)就維護(hù)了一個(gè)接收者的集合,用于存放所有的廣播接收者。
到此這篇關(guān)于Java設(shè)計(jì)模式探究之觀察者模式詳解的文章就介紹到這了,更多相關(guān)Java觀察者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java動(dòng)態(tài)追蹤技術(shù)探究之從JSP到Arthas
這篇文章主要介紹了Java動(dòng)態(tài)追蹤技術(shù)探究之從JSP到Arthas,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06
Java將word文件轉(zhuǎn)成pdf文件的操作方法
這篇文章主要介紹了Java將word文件轉(zhuǎn)成pdf文件的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
項(xiàng)目依賴Springboot jar失敗解決方案
這篇文章主要介紹了項(xiàng)目依賴Springboot jar失敗解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot注冊(cè)FilterRegistrationBean相關(guān)情況講解
這篇文章主要介紹了SpringBoot注冊(cè)FilterRegistrationBean相關(guān)情況,借助FilterRegistrationBean來注冊(cè)filter,可以避免在web.xml種配置filter這種原始的寫法2023-02-02

