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

資訊專欄INFORMATION COLUMN

觀察者模式

renweihub / 2224人閱讀

摘要:描述多個(gè)對(duì)象對(duì)某一個(gè)主題感興趣,當(dāng)主題變化時(shí),所有對(duì)這主題感興趣的對(duì)象都能收到通知場(chǎng)景很多用戶都訂閱一篇新聞,當(dāng)這篇新聞?dòng)凶兓瘯r(shí),訂閱的用戶都能收到通知實(shí)現(xiàn)抽象一個(gè)觀察者,它可以根據(jù)訂閱的主題和狀態(tài)值進(jìn)行后續(xù)操作定義讀者觀察者收到主題的值改

描述:多個(gè)對(duì)象對(duì)某一個(gè)主題感興趣,當(dāng)主題變化時(shí),所有對(duì)這主題感興趣的對(duì)象都能收到通知

場(chǎng)景:很多用戶都訂閱一篇新聞,當(dāng)這篇新聞?dòng)凶兓瘯r(shí),訂閱的用戶都能收到通知

實(shí)現(xiàn):

抽象一個(gè)觀察者,它可以根據(jù)訂閱的主題和狀態(tài)值進(jìn)行后續(xù)操作

interface Observer {
    void update(Subject subject, int val);
}

定義讀者1

class ObserverOne implements Observer {

    @Override
    public void update(Subject subject, int val) {
        System.out.println(String.format("觀察者1收到主題[%s]的值改變?yōu)閇%d]", subject.toString(), val));
    }
}

定義讀者2

class ObserverTwo implements Observer {

    @Override
    public void update(Subject subject, int val) {
        System.out.println(String.format("觀察者2收到主題[%s]的值改變?yōu)閇%d]", subject.toString(), val));
    }
}

抽象一個(gè)主題

abstract class Subject {

    private List observers = new ArrayList();

    void register(Observer observer) {
        this.observers.add(observer);
    }

    void remove(Observer observer) {
        this.observers.remove(observer);
    }

    void notify(int val) {
        for(Observer o : observers) {
            o.update(this, val);
        }
    };
}

定義一個(gè)新聞,讀者1、2可以對(duì)其訂閱

class NewsSubject extends Subject {

    String name;

    int val;

    NewsSubject(String name, int val) {
        this.name = name;
        this.val = val;
    }

    void change(int val) {
        int rawVal = this.val;
        this.val = val;
        System.out.println(String.format("[%s]的狀態(tài)由[%d]變?yōu)閇%d]",name, rawVal, val));
        notify(val);
    }

    @Override
    public String toString() {
        return name;
    }
}

讀者1、2訂閱了一條新聞,當(dāng)新聞變動(dòng)了,比如有新評(píng)論了,讀者1,2都能收到通知

public class ObserverDemo {
    public static void main(String[] args) {
        Observer observerOne = new ObserverOne();
        Observer observerTwo = new ObserverTwo();
        NewsSubject subject = new NewsSubject("新聞", 1);
        subject.register(observerOne);
        subject.register(observerTwo);
        subject.change(10);
        subject.change(20);
    }
}

打印結(jié)果:

  

[新聞]的狀態(tài)由[1]變?yōu)閇10]
觀察者1收到主題[新聞]的值改變?yōu)閇10]
觀察者2收到主題[新聞]的值改變?yōu)閇10]
[新聞]的狀態(tài)由[10]變?yōu)閇20]
觀察者1收到主題[新聞]的值改變?yōu)閇20]
觀察者2收到主題[新聞]的值改變?yōu)閇20]

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

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

相關(guān)文章

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

    摘要:關(guān)鍵概念理解觀察者設(shè)計(jì)模式中主要區(qū)分兩個(gè)概念觀察者指觀察者對(duì)象,也就是消息的訂閱者被觀察者指要觀察的目標(biāo)對(duì)象,也就是消息的發(fā)布者。 原文首發(fā)于微信公眾號(hào):jzman-blog,歡迎關(guān)注交流! 最近補(bǔ)一下設(shè)計(jì)模式相關(guān)的知識(shí),關(guān)于觀察者設(shè)計(jì)模式主要從以下幾個(gè)方面來學(xué)習(xí),具體如下: 什么是觀察者設(shè)計(jì)模式 關(guān)鍵概念理解 通知觀察者的方式 觀察者模式的實(shí)現(xiàn) 觀察者模式的優(yōu)缺點(diǎn) 使用場(chǎng)景 下面...

    NotFound 評(píng)論0 收藏0
  • 設(shè)計(jì)模式察者模式與發(fā)布訂閱模式

    摘要:觀察者模式與發(fā)布訂閱的區(qū)別在模式中,知道,同時(shí)還保留了的記錄。發(fā)布者訂閱者在大多情況下是異步方式使用消息隊(duì)列。圖片源于網(wǎng)絡(luò)侵權(quán)必刪如果以結(jié)構(gòu)來分辨模式,發(fā)布訂閱模式相比觀察者模式多了一個(gè)中間件訂閱器,所以發(fā)布訂閱模式是不同于觀察者模式的。 學(xué)習(xí)了一段時(shí)間設(shè)計(jì)模式,當(dāng)學(xué)到觀察者模式和發(fā)布訂閱模式的時(shí)候遇到了很大的問題,這兩個(gè)模式有點(diǎn)類似,有點(diǎn)傻傻分不清楚,博客起因如此,開始對(duì)觀察者和發(fā)布...

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

    摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個(gè)角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個(gè)角色,還有第三個(gè)角色經(jīng)紀(jì)人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長(zhǎng)時(shí)間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計(jì)模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計(jì)模式在從頭學(xué)習(xí)一遍,不然都對(duì)不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...

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

    摘要:總結(jié)一下從表面上看觀察者模式里,只有兩個(gè)角色觀察者被觀察者而發(fā)布訂閱模式,卻不僅僅只有發(fā)布者和訂閱者兩個(gè)角色,還有第三個(gè)角色經(jīng)紀(jì)人存在。參考鏈接觀察者模式發(fā)布訂閱模式 做了這么長(zhǎng)時(shí)間的 菜鳥程序員 ,我好像還沒有寫過一篇關(guān)于設(shè)計(jì)模式的博客...咳咳...意外,純屬意外。所以,我決定,從這一刻起,我要把設(shè)計(jì)模式在從頭學(xué)習(xí)一遍,不然都對(duì)不起我這 菜鳥 的身份。那這次,就從觀察者模式開始好啦...

    makeFoxPlay 評(píng)論0 收藏0
  • 訂閱發(fā)布模式察者模式的區(qū)別

    摘要:或許以前認(rèn)為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。參考文章訂閱發(fā)布模式和觀察者模式真的不一樣 首選我們需要先了解兩者的定義和實(shí)現(xiàn)的方式,才能更好的區(qū)分兩者的不同點(diǎn)。 或許以前認(rèn)為訂閱發(fā)布模式是觀察者模式的一種別稱,但是發(fā)展至今,概念已經(jīng)有了不少區(qū)別。 訂閱發(fā)布模式 在軟件架構(gòu)中,發(fā)布-訂閱是一種消息范式,消息的發(fā)送者(稱為發(fā)布者)不會(huì)將消息直接發(fā)送給特...

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

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

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

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

0條評(píng)論

renweihub

|高級(jí)講師

TA的文章

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