觀察者模式(Observer)

定義

當(dāng)一個對象變化時弹渔,其它依賴該對象的對象都會收到通知媒熊,并且隨著變化!對象之間是一種一對多的關(guān)系谜酒。觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式叹俏、模型-視圖(Model/View)模式、源-監(jiān)聽器(Source/Listener)模式或從屬者(Dependents)模式僻族。

角色

  • Subject: 目標(biāo)
  • ConcreteSubject: 具體目標(biāo)
  • Observer: 觀察者
  • ConcreteObserver: 具體觀察者

實例

創(chuàng)建observer

public interface Observer {
    public void update(String massage);
}

創(chuàng)建ConcreteObserver類

public class ConcreteObserver implements Observer {
    private String name;

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

    @Override
    public void update(String massage) {
        System.out.println(massage+" "+name);
    }
}

創(chuàng)建subject

public interface Subject {
    /**
     * @author Royle.Huang
     * @date 2019/1/1 17:10
     * @description: 增加訂閱
     */
    void attach(Observer observer);
    /**
     * @author Royle.Huang
     * @date 2019/1/1 17:11
     * @description: 刪除訂閱
     */
    void dettach(Observer observer);
    /**
     * @author Royle.Huang
     * @date 2019/1/1 17:11
     * @description: 通知訂閱者
     */
    void notify(String massage);
}

創(chuàng)建ConcreteSubject類

public class ConcreteSubject implements Subject {

    List<Observer> list = new ArrayList<>();

    @Override
    public void attach(Observer observer) {
        list.add(observer);
    }

    @Override
    public void dettach(Observer observer) {
        list.remove(observer);
    }

    @Override
    public void notify(String massage) {
        for (Observer observer : list) {
            observer.update(massage);
        }
    }
}

測試代碼

public class Test {
    public static void main(String[] args) {
        Observer observer = new ConcreteObserver("goudan");
        Observer observer2 = new ConcreteObserver("luffy");
        Observer observer3 = new ConcreteObserver("java");

        Subject subject = new ConcreteSubject();
        subject.attach(observer);
        subject.attach(observer2);
        subject.attach(observer3);

        subject.notify("a message for");
    }
}

運行結(jié)果

a message for goudan
a message for luffy
a message for java
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粘驰,一起剝皮案震驚了整個濱河市屡谐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝌数,老刑警劉巖愕掏,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顶伞,居然都是意外死亡饵撑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門枝哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肄梨,“玉大人,你說我怎么就攤上這事挠锥≈谙郏” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵蓖租,是天一觀的道長粱侣。 經(jīng)常有香客問我,道長蓖宦,這世上最難降的妖魔是什么齐婴? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮稠茂,結(jié)果婚禮上柠偶,老公的妹妹穿的比我還像新娘。我一直安慰自己睬关,他們只是感情好诱担,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著电爹,像睡著了一般蔫仙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丐箩,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天摇邦,我揣著相機與錄音,去河邊找鬼屎勘。 笑死施籍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的概漱。 我是一名探鬼主播丑慎,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了立哑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤姻灶,失蹤者是張志新(化名)和其女友劉穎铛绰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體产喉,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡捂掰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了曾沈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片这嚣。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖塞俱,靈堂內(nèi)的尸體忽然破棺而出姐帚,到底是詐尸還是另有隱情,我是刑警寧澤障涯,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布罐旗,位于F島的核電站,受9級特大地震影響唯蝶,放射性物質(zhì)發(fā)生泄漏九秀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一粘我、第九天 我趴在偏房一處隱蔽的房頂上張望鼓蜒。 院中可真熱鬧,春花似錦征字、人聲如沸都弹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缔杉。三九已至,卻和暖如春搁料,著一層夾襖步出監(jiān)牢的瞬間或详,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工郭计, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留霸琴,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓昭伸,卻偏偏與公主長得像梧乘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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