国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

vvpale / 3413人閱讀

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

概念

觀察者模式:定義了對(duì)象之間的一對(duì)多依賴,這樣一來(lái),當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),他的所有依賴者都會(huì)收到通知并自動(dòng)更新。

觀察者模式涉及的角色

主題(Subject):一對(duì)多中的一,持有數(shù)據(jù),當(dāng)數(shù)據(jù)更新時(shí),通知已注冊(cè)的觀察者

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

舉個(gè)栗子

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

代碼

Person.java,Mother和Child都繼承這個(gè)類[這步和講述觀察者模式?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("小愛");

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

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

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

運(yùn)行結(jié)果:

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/76884.html

相關(guān)文章

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

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

    jsummer 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式察者模式

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

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

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

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

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

    xuweijian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<