觀察者模式

觀察者模式是對象的行為模式厕隧。又叫發(fā)布訂閱模式、源監(jiān)聽模式等炸站。
它定義了一種一對多的依賴關系星澳,讓多個觀察者同時監(jiān)聽某一個主題對象,當主題對象狀態(tài)發(fā)生變化旱易,會通知所有的觀察者對象禁偎,使他們能夠自動更新自己。

image.png

抽象主題角色:Subject接口:

主題角色把所有觀察者對象的引用保存在一個聚集里阀坏,每個主題都可以有任意數(shù)量的觀察者如暖。抽象主題提供一個接口,可以增加和刪除觀察者對象全释。

//主題接口
 interface Subject {
     //添加觀察者
     void addObserver(Observer obj);
     //移除觀察者
     void deleteObserver(Observer obj);
     //當主題方法改變時,這個方法被調用,通知所有的觀察者
     void notifyObserver();
}

抽象觀察者:Oserver接口:

為所有具體觀察者定義一個接口装处,在得到主題通知時更新自己,這個接口叫做更新接口浸船。

interface Observer {
   
    public void update();
}

具體主題角色:

import java.util.ArrayList;
import java.util.List;

public class TeacherSubject implements Subject {
    //用來存放和記錄觀察者
    private List<Observer> observers=new ArrayList<Observer>();

    
    @Override
    public void addObserver(Observer obj) {
        observers.add(obj);
    }

    @Override
    public void deleteObserver(Observer obj) {
        int i = observers.indexOf(obj);
        if(i>=0){
            observers.remove(obj);
        }
    }

    @Override
    public void notifyObserver() {
        for(int i=0;i<observers.size();i++){
            Observer o=(Observer)observers.get(i);
            o.update();
        }
    }

 public void setHomework(){
     
        System.out.println("開始做作業(yè)了...同學們");
        this.notifyObserver();
    }

}

具體觀察者角色:

public class StudentObserver implements Observer {

  
    private String name;
    //構造器用來注冊觀察者
    public StudentObserver (String name) {
        this.name=name;
    
    }


    @Override
    public void update() {
        System.out.println(name+"開始做作業(yè)");
        
    }

}

調用

public class TestObserver {

    public static void main(String[] args) {
        
        TeacherSubject teacher=new TeacherSubject();

        StudentObserver zhangSan=new StudentObserver("張三");
        StudentObserver LiSi=new StudentObserver("李四");
        StudentObserver WangWu=new StudentObserver("王五");

        teacher.addObserver(zhangSan);
        teacher.addObserver(LiSi);
        teacher.addObserver(WangWu);

         teacher.setHomework();
   
    }
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妄迁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子李命,更是在濱河造成了極大的恐慌登淘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件封字,死亡現(xiàn)場離奇詭異黔州,居然都是意外死亡耍鬓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門流妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來牲蜀,“玉大人,你說我怎么就攤上這事绅这』链铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵证薇,是天一觀的道長度苔。 經(jīng)常有香客問我,道長浑度,這世上最難降的妖魔是什么寇窑? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮箩张,結果婚禮上甩骏,老公的妹妹穿的比我還像新娘。我一直安慰自己伏钠,他們只是感情好横漏,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熟掂,像睡著了一般缎浇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赴肚,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天素跺,我揣著相機與錄音,去河邊找鬼誉券。 笑死指厌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的踊跟。 我是一名探鬼主播踩验,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼商玫!你這毒婦竟也來了箕憾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拳昌,失蹤者是張志新(化名)和其女友劉穎袭异,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炬藤,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡御铃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年碴里,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片上真。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡咬腋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睡互,到底是詐尸還是另有隱情帝火,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布湃缎,位于F島的核電站,受9級特大地震影響蠢壹,放射性物質發(fā)生泄漏嗓违。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一图贸、第九天 我趴在偏房一處隱蔽的房頂上張望蹂季。 院中可真熱鬧,春花似錦疏日、人聲如沸偿洁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涕滋。三九已至,卻和暖如春挠阁,著一層夾襖步出監(jiān)牢的瞬間宾肺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工侵俗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锨用,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓隘谣,卻偏偏與公主長得像增拥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寻歧,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

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

  • 【學習難度:★★★☆☆掌栅,使用頻率:★★★★★】直接出處:觀察者模式梳理和學習:https://github.com...
    BruceOuyang閱讀 1,529評論 1 5
  • 本文的結構如下: 什么是觀察者模式 為什么要用該模式 模式的結構 代碼示例 推模型和拉模型 優(yōu)點和缺點 適用環(huán)境 ...
    w1992wishes閱讀 1,439評論 0 16
  • 1 場景問題# 1.1 訂閱報紙的過程## 來考慮實際生活中訂閱報紙的過程,這里簡單總結了一下熄求,訂閱報紙的基本流程...
    七寸知架構閱讀 4,622評論 5 57
  • 本篇文章介紹一種設計模式——觀察者模式渣玲。觀察者模式在Android中有著很多的應用,如按鈕監(jiān)聽弟晚,接口回調以及很多流...
    Ruheng閱讀 2,983評論 6 30
  • 近來很通行說青年忘衍;開口青年逾苫,閉口也是青年。但青年又何能一概而論枚钓?有醒著的铅搓,有睡著的,有昏著的搀捷,有躺著的星掰,有玩著的,...
    千千結xt閱讀 1,180評論 0 3