成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVA設(shè)計模式-觀察者模式

vvpale / 3423人閱讀

摘要:觀察者模式涉及的角色主題一對多中的一,持有數(shù)據(jù),當數(shù)據(jù)更新時,通知已注冊的觀察者觀察者一對多中的多,接收主題數(shù)據(jù)做出響應(yīng)舉個栗子一位媽媽主題有兩個孩子,取名為小愛和小冰觀察者。

概念

觀察者模式:定義了對象之間的一對多依賴,這樣一來,當一個對象狀態(tài)改變時,他的所有依賴者都會收到通知并自動更新。

觀察者模式涉及的角色

主題(Subject):一對多中的一,持有數(shù)據(jù),當數(shù)據(jù)更新時,通知已注冊的觀察者

觀察者(Observer):一對多中的多,接收主題數(shù)據(jù)做出響應(yīng)

舉個栗子

一位媽媽(主題)有兩個孩子,取名為小愛和小冰(觀察者)。一天小愛和小冰都去找她們的朋友玩,當?shù)搅顺燥埖臅r間,媽媽總會打電話通知她們回來吃飯(孩子默認在媽媽那注冊為觀察者registerObserver),但中途小冰打電話和媽媽說:“不回來吃飯了,和朋友吃”(取消觀察者這角色removeObserver)。所以最后,只有小冰收到媽媽的通知,并告訴她今天買了你喜歡吃的雞腿(notifyObserver)。

代碼

Person.java,Mother和Child都繼承這個類[這步和講述觀察者模式?jīng)]什么關(guān)系]

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Mother.java

public class Mother extends Person implements Subject{

    /**
     * 她要通知的孩子
     */
    private ArrayList children = new ArrayList<>();
    /**
     * 通知的內(nèi)容
     */
    private String message;

    public Mother(String name) {
        super(name);
    }


    @Override
    public void registerObserver(Observer observer) {
        children.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        children.remove(observer);
    }

    @Override
    public void notifyObserver() {
        children.forEach(observer -> observer.message(message));
    }

    public void sendMessage(String message) {
        this.message = message;
        // 通知她們
        notifyObserver();
    }
}

Child.java

public class Child extends Person implements Observer{

    public Child(String name) {
        super(name);
    }

    @Override
    public void message(String m) {
        System.out.println(getName() + "收到的消息:"  + m);
    }
}

Main.java

public class Main {

    public static void main(String[] args) {
        Mother mother = new Mother("媽媽");
        Child xiaoBing = new Child("小冰");
        Child xiaoAi = new Child("小愛");

        // 孩子都是親生的,吃飯時叫她們
        mother.registerObserver(xiaoBing);
        mother.registerObserver(xiaoAi);

        mother.sendMessage("飯煮好了,回來吃飯,買了你們想吃的雞腿");

        System.out.println("------------------分割線-----------------------");
        // 小愛說不回來吃了,取消通知她
        mother.removeObserver(xiaoAi);
        mother.sendMessage("飯煮好了,回來吃飯,買了你們想吃的雞腿");
    }
}

運行結(jié)果:

小冰收到的消息:飯煮好了,回來吃飯,買了你們想吃的雞腿
小愛收到的消息:飯煮好了,回來吃飯,買了你們想吃的雞腿
------------------分割線-----------------------
小冰收到的消息:飯煮好了,回來吃飯,買了你們想吃的雞腿
優(yōu)點

主題觀察者之間松耦合。有新類型的觀察者出現(xiàn)時,主題的代碼不需要修改。假如我們有一個新的具體類需要當觀察者,我們不需要為了兼容新類型而修改主題的代碼,所有要做的就是在新的類里實現(xiàn)此觀察者接口,然后注冊成觀察者即可。

就好比如上面例子,如果國家不久的將來開放三胎政策,媽媽又生了個小娜,媽媽不需要修改自身的邏輯。如果孩子要回家吃飯就實現(xiàn)Observer接口,媽媽那registerObserver就OK。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76884.html

相關(guān)文章

  • Java 設(shè)計模式察者模式

    摘要:三內(nèi)置觀察者模式了解內(nèi)置觀察者模式包內(nèi)包含最基本的類與接口,這和上面的接口與接口很類似。根據(jù)具體的需求,如果內(nèi)置的觀察者模式不能滿設(shè)計,那么我們可以像剛開始那樣自己實現(xiàn)一套觀察者模式。參考資料設(shè)計模式 一、了解觀察者模式 1.1 什么是觀察者模式 觀察者模式定義了對象之間的一對多依賴,這樣一來,當一個對象狀態(tài)改變時,它的所有依賴者都會收到通知并自動更新。 典型的問題比如報社,只要你是他...

    jsummer 評論0 收藏0
  • Java設(shè)計模式察者模式

    摘要:觀察者模式的使用場景比如你微博關(guān)注了一個人,那么這個人發(fā)布的微博就會推送到你這。 Java設(shè)計模式之觀察者模式 一直想寫一篇學(xué)習(xí)觀察者模式的總結(jié)沒有契機,今天學(xué)習(xí)阻塞隊列的原理時候看到在實現(xiàn)生產(chǎn)者消費者的時候用到了通知模式,就是所謂的觀察者模式,正好順便整理一下。 1. 簡介 觀察者模式定義對象間的一種一對多的依賴關(guān)系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更...

    haitiancoder 評論0 收藏0
  • 我的Java設(shè)計模式-察者模式

    摘要:為了幫助灰太狼擺脫被老婆平底鍋抽的悲劇,發(fā)起了解救灰太狼的行動,必須要知道觀察者模式。持有觀察者對象的集合。設(shè)計模式源碼下載 相信大家都有看過《喜洋洋與灰太狼》,說的是灰太狼和羊族的斗爭,而每次的結(jié)果都是灰太狼一飛沖天,伴隨著一句我還會回來的......。為灰太狼感到悲哀,抓不到羊,在家也被老婆平底鍋虐待?;姨菫槭裁磿@么背? 很簡單,灰太狼本身就有暴露行蹤的屬性,羊咩咩就能知曉灰太...

    smartlion 評論0 收藏0
  • 自我理解-察者(Observer)模式

    摘要:觀察者模式觀察者模式也可以成為發(fā)布訂閱模式,此模式是對象之間的模式,對象之間呈現(xiàn)一種一對多的關(guān)系。其中的一是被觀察者,多是觀察者,故被觀察者不能產(chǎn)生多個對象,只能有一個對象供觀察者觀察,所以在寫被觀察者的時候,需要使用到單例模式。 觀察者(Observer)模式 觀察者(Observer)模式 也可以成為發(fā)布訂閱模式,此模式是對象之間的模式,對象之間呈現(xiàn)一種一對多的關(guān)系。其中的一是被觀...

    xuweijian 評論0 收藏0

發(fā)表評論

0條評論

vvpale

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<