觀察者模式

觀察者模式

在對(duì)象之間定義了一對(duì)多的依賴离赫,這樣一來(lái),當(dāng)一個(gè)對(duì)象改變狀態(tài)锣光,依賴它的對(duì)象會(huì)收到通知并自動(dòng)更新笆怠。

打個(gè)比方,微信公眾號(hào)推出了一篇文章誊爹,關(guān)注此公眾號(hào)的用戶都會(huì)收到推送蹬刷,下面看具體實(shí)現(xiàn)


在實(shí)現(xiàn)之前呢,首先要清楚觀察者模式有幾個(gè)角色:

  • 主題抽象:被觀察者的頂層抽象频丘、標(biāo)準(zhǔn)办成,可以是接口或者抽象類,將所有的觀察者對(duì)象保存在集合屬性中搂漠,可以對(duì)觀察者進(jìn)行新增和刪除迂卢,同時(shí)可以通知所有觀察者,見下圖MySubject
  • 主題實(shí)現(xiàn)類:對(duì)主題抽象的具體實(shí)現(xiàn)
  • 觀察者抽象:觀察者的頂層抽象桐汤,可以是接口或者抽象類而克,提供狀態(tài)更新方法,與主題類進(jìn)行同步
  • 觀察者實(shí)現(xiàn)類:對(duì)觀察者抽象的具體實(shí)現(xiàn)
  • UML類圖
觀察者模式.png
  • 主題抽象 MySubject

    public interface MySubject {
      //添加觀察者
        void addObserver(MyObserver userObserver);
      //刪除觀察者
        void removeObserver(MyObserver userObserver);
      //去通知觀察者
        void notifyUser();
    
    }
    
  • 微信公眾號(hào)WechatSubject(主題實(shí)現(xiàn)類)

    public class WechatSubject implements MySubject {
    
        private List<MyObserver> list = new ArrayList<MyObserver>();
        private String message;
        @Override
        public void addObserver(MyObserver userObserver) {
            list.add(userObserver);
        }
    
        @Override
        public void removeObserver(MyObserver userObserver) {
            list.remove(userObserver);
        }
    
        @Override
        public void notifyUser() {
    
            for(MyObserver observer : list){
    
                observer.update(message);
    
            }
        }
    
        public  void updateArtical(String message){
            this.message = message;
    
            System.out.println("微信公眾號(hào)發(fā)布了消息:"+message);
            System.out.println("==============================");
            this.notifyUser();
        }
    }
    
  • 觀察者抽象 MyObserver

    public interface MyObserver {
    
        void update(String message);
    }
    
  • 觀察者實(shí)現(xiàn)類 User1

    public class User1 implements MyObserver{
        @Override
        public void update(String message) {
            System.out.println("User1接受到了此消息:"+message);
        }
    }
    
  • 觀察者實(shí)現(xiàn)類 User2

    public class User2 implements MyObserver{
        @Override
        public void update(String message) {
            System.out.println("User2接受到了此消息:"+message);
        }
    }
    
  • 測(cè)試類

    public class ObserverTest {
    
    
        public static void main(String[] args) {
            //初始化微信公眾號(hào)
            WechatSubject subject = new WechatSubject();
    
            //創(chuàng)建觀察者實(shí)現(xiàn)類
            MyObserver user1 = new User1();
            MyObserver user2 = new User2();
    
            //將觀察者注冊(cè)到公眾號(hào)中
            subject.addObserver(user1);
            subject.addObserver(user2);
    
            //公眾號(hào)更新文章
            subject.updateArtical("阿里年薪兩百萬(wàn)P8大佬網(wǎng)上征婚引起熱議~~~~~");
            subject.removeObserver(user1);
            System.out.println("======================");
            subject.updateArtical("滴滴某技術(shù)部門裁員30%~~~~~");
        }
    }
    
  • 輸出

    微信公眾號(hào)發(fā)布了消息:阿里年薪兩百萬(wàn)P8大佬網(wǎng)上征婚引起熱議~~~~~
    ==============================
    User1接受到了此消息:阿里年薪兩百萬(wàn)P8大佬網(wǎng)上征婚引起熱議~~~~~
    User2接受到了此消息:阿里年薪兩百萬(wàn)P8大佬網(wǎng)上征婚引起熱議~~~~~
    ======================
    微信公眾號(hào)發(fā)布了消息:滴滴某技術(shù)部門裁員30%~~~~~
    ==============================
    User2接受到了此消息:滴滴某技術(shù)部門裁員30%~~~~~
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怔毛,一起剝皮案震驚了整個(gè)濱河市员萍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拣度,老刑警劉巖碎绎,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異抗果,居然都是意外死亡筋帖,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門冤馏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)日麸,“玉大人,你說(shuō)我怎么就攤上這事逮光∽富矗” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵睦霎,是天一觀的道長(zhǎng)梢卸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)副女,這世上最難降的妖魔是什么蛤高? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上戴陡,老公的妹妹穿的比我還像新娘塞绿。我一直安慰自己,他們只是感情好恤批,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布异吻。 她就那樣靜靜地躺著,像睡著了一般喜庞。 火紅的嫁衣襯著肌膚如雪诀浪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天延都,我揣著相機(jī)與錄音雷猪,去河邊找鬼。 笑死晰房,一個(gè)胖子當(dāng)著我的面吹牛求摇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殊者,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼与境,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了猖吴?” 一聲冷哼從身側(cè)響起嚷辅,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎距误,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扁位,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡准潭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了域仇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刑然。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖暇务,靈堂內(nèi)的尸體忽然破棺而出泼掠,到底是詐尸還是另有隱情,我是刑警寧澤垦细,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布择镇,位于F島的核電站,受9級(jí)特大地震影響括改,放射性物質(zhì)發(fā)生泄漏腻豌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吝梅。 院中可真熱鬧虱疏,春花似錦、人聲如沸苏携。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)右冻。三九已至装蓬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間国旷,已是汗流浹背矛物。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跪但,地道東北人履羞。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屡久,于是被迫代替她去往敵國(guó)和親忆首。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 何時(shí)使用觀察者模式 1被环、觸發(fā)聯(lián)動(dòng):當(dāng)修改目標(biāo)狀態(tài)時(shí)就會(huì)觸發(fā)相應(yīng)的通知糙及,然后會(huì)循環(huán)調(diào)用所有注冊(cè)的觀察者對(duì)象的相應(yīng)方法...
    哥哥是歐巴Vitory閱讀 361評(píng)論 0 0
  • 前言定義:觀察者設(shè)計(jì)模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系,以便一個(gè)對(duì)象的狀態(tài)發(fā)生變化時(shí)筛欢,所有依賴于它的對(duì)象都得到...
    xsp單細(xì)胞閱讀 449評(píng)論 0 1
  • 1浸锨、什么是觀察者模式? ? 觀察者模式是一種關(guān)注對(duì)象之間責(zé)任分配的行為模式版姑。觀察者模式定義了對(duì)象之間的...
    先弓閱讀 324評(píng)論 1 0
  • 深夜總是讓人深思剥险,在這寂靜的空間里聪蘸,白日的煩惱似乎都已消失,只剩下我和我心中的一隅表制。這個(gè)城市睡去了健爬,好像只有我一個(gè)...
    Yuki_Liu閱讀 219評(píng)論 0 0
  • Our deepest fear is not that we are inadequate. Our deepe...
    雨天的那棵樹閱讀 384評(píng)論 0 1