欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式探究之觀察者模式詳解

 更新時(shí)間:2022年08月29日 09:04:18   作者:niuyongzhi  
這篇文章主要為大家詳細(xì)介紹了JAVA的觀察者模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

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è)廣播接收者,來(lái)接收系統(tǒng)廣播。在Android源碼中,其實(shí)就維護(hù)了一個(gè)接收者的集合,用于存放所有的廣播接收者。

到此這篇關(guān)于Java設(shè)計(jì)模式探究之觀察者模式詳解的文章就介紹到這了,更多相關(guān)Java觀察者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    Dubbo服務(wù)校驗(yàn)參數(shù)的解決方案

    這篇文章主要介紹了Dubbo服務(wù)如何優(yōu)雅的校驗(yàn)參數(shù),Dubbo框架本身是支持參數(shù)校驗(yàn)的,同時(shí)也是基于JSR303去實(shí)現(xiàn)的,今天通過(guò)示例代碼介紹下詳細(xì)實(shí)現(xiàn)過(guò)程,需要的朋友可以參考下
    2022-03-03
  • 深入了解Java atomic原子類的使用方法和原理

    深入了解Java atomic原子類的使用方法和原理

    這篇文章主要介紹了深入了解Java atomic原子類的使用方法和原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • Java解析XML文件開(kāi)源庫(kù)DOM4J

    Java解析XML文件開(kāi)源庫(kù)DOM4J

    dom4j是一個(gè)Java的XML API,是jdom的升級(jí)品,用來(lái)讀寫(xiě)XML文件的。dom4j是一個(gè)十分優(yōu)秀的JavaXML API,具有性能優(yōu)異、功能強(qiáng)大和極其易使用的特點(diǎn),它的性能超過(guò)sun公司官方的dom技術(shù),同時(shí)它也是一個(gè)開(kāi)放源代碼的軟件
    2023-01-01
  • 使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用

    使用Thrift實(shí)現(xiàn)跨語(yǔ)言RPC的調(diào)用

    Thrift最大的優(yōu)勢(shì)就是可以實(shí)現(xiàn)跨語(yǔ)言RPC調(diào)用,尤其在一些大廠,微服務(wù)各模塊之間使用不同的語(yǔ)言是很常見(jiàn)的,本文就將使用java作為服務(wù)端,用python作為客戶端,實(shí)現(xiàn)不同語(yǔ)言之間的RPC調(diào)用,需要的可以參考下
    2023-10-10
  • 在Spring?Boot中啟用HTTPS的方法

    在Spring?Boot中啟用HTTPS的方法

    本文介紹了在Spring Boot項(xiàng)目中啟用HTTPS的步驟,從生成SSL證書(shū)開(kāi)始,到配置Spring Boot。HTTPS是保護(hù)Web應(yīng)用程序安全的基石之一,而Spring Boot則提供了相對(duì)簡(jiǎn)易的途徑來(lái)配置它,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù)

    java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù)

    這篇文章主要為大家詳細(xì)介紹了java隨機(jī)抽取指定范圍內(nèi)不重復(fù)的n個(gè)數(shù),感興趣的小伙伴們可以參考一下
    2016-02-02
  • SpringBoot中定時(shí)任務(wù)的使用方法解析

    SpringBoot中定時(shí)任務(wù)的使用方法解析

    這篇文章主要介紹了SpringBoot中定時(shí)任務(wù)的使用方法解析,@EnableScheduling?注解,它的作用是發(fā)現(xiàn)注解?@Scheduled的任務(wù)并由后臺(tái)執(zhí)行,沒(méi)有它的話將無(wú)法執(zhí)行定時(shí)任務(wù),需要的朋友可以參考下
    2024-01-01
  • Java zxing生成條形碼和二維嗎代碼實(shí)例

    Java zxing生成條形碼和二維嗎代碼實(shí)例

    這篇文章主要介紹了java zxing生成條形碼和二維嗎代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解Java中finally和return的執(zhí)行順序

    詳解Java中finally和return的執(zhí)行順序

    try-catch-finally是一種針對(duì)程序運(yùn)行時(shí)出錯(cuò)的響應(yīng)手段,對(duì)于一些可以預(yù)料到的出錯(cuò)類型,在發(fā)生時(shí)對(duì)其進(jìn)行報(bào)告和補(bǔ)救,這篇文章主要介紹了Java中finally和return的執(zhí)行順序,需要的朋友可以參考下
    2024-01-01
  • Mybatis返回單個(gè)實(shí)體或者返回List的實(shí)現(xiàn)

    Mybatis返回單個(gè)實(shí)體或者返回List的實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis返回單個(gè)實(shí)體或者返回List的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論