讀書筆記:淺談觀察者模式

觀察者模式是行為模式的一種,主要是用來進行消息的訂閱和通知乍狐,一個觀察者模式應(yīng)該包括4個部分赠摇,抽象主題、主題的實現(xiàn)浅蚪、抽象的觀察者藕帜、觀察者的實現(xiàn),下面我們通過搭建一個簡單的觀察者實例來解釋一下觀察者模式具體是怎么回事:

抽象主題:

abstract class abstractSubject{
    //觀察者隊列
    public List<abstractObserver> list;
    //對所有的觀察者進行通知
    public abstract void notifyObverserver(String message);
    //添加觀察者
    public abstract void addOberserver(abstractObserver o);
    //移除觀察者
    public abstract void removeObverser(abstractObserver o);
}

抽象主題的實現(xiàn):

class Subject extends abstractSubject{

    public Subject(){
        list = new ArrayList<abstractObserver>();
    }

    @Override
    public void removeObverser(abstractObserver o){
        list.remove(o);
    }

    @Override
    public void notifyObverserver(String message) {
        Iterator it = list.iterator();
        while (it.hasNext()){
            ((Obverserver)(it.next())).update(message);
        }
    }

    @Override
    public void addOberserver(abstractObserver o) {
        list.add(o);
    }
}

抽象觀察者:

abstract class abstractObserver{
    //被回調(diào)的方法,主要用來進行通知
    public abstract void update(String message);
}

抽象觀察者的實現(xiàn):

class Obverserver extends abstractObserver{
    public String name;
    public Obverserver(String name){
        this.name = name;
    }

    public void update(String message){
        System.out.println(name + " update:" + message);
    }
}

測試代碼:

        abstractSubject subject = new Subject();
        abstractObserver observer1 = new Obverserver("Linda");
        abstractObserver observer2 = new Obverserver("Jack");
        abstractObserver observer3 = new Obverserver("Peter");

        subject.addOberserver(observer1);
        subject.addOberserver(observer2);
        subject.addOberserver(observer3);

        subject.notifyObverserver("something happens");

        subject.removeObverser(observer2);
        subject.notifyObverserver("delete a object");

測試結(jié)果:

測試結(jié)果

分析一下上面的代碼惜傲,我們定義了兩個抽象類abstractSubject和abstractObserver對觀察者和收集者的行為進行定義耘戚,隨后會對這兩個抽象類進行具體的實現(xiàn),抽象主題類中定義了一個鏈表操漠,用來添加和刪除觀察者,假如主題中發(fā)生了改變,通過遍歷觀察者鏈表浊伙,并調(diào)用觀察者的update方法來實現(xiàn)對觀察者的更新撞秋。看一下我們的測試代碼嚣鄙,我們創(chuàng)建了3個觀察者吻贿,并對所有觀察者進行通知,隨后刪除了一個觀察者哑子,并對剩下的兩個觀察者進行通知

觀察者的可以實現(xiàn)對所有的訂閱者進行統(tǒng)一的通知舅列,但是由于上面的調(diào)用是阻塞式調(diào)用,所以在鏈表很大時的效率比較低卧蜓,我們可以通過對鏈表中的元素通知進行多線程式調(diào)用從而增加通知的效率

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帐要,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弥奸,更是在濱河造成了極大的恐慌榨惠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盛霎,死亡現(xiàn)場離奇詭異赠橙,居然都是意外死亡,警方通過查閱死者的電腦和手機愤炸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門期揪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人规个,你說我怎么就攤上這事凤薛。” “怎么了绰姻?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵枉侧,是天一觀的道長。 經(jīng)常有香客問我狂芋,道長榨馁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任帜矾,我火速辦了婚禮翼虫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屡萤。我一直安慰自己珍剑,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布死陆。 她就那樣靜靜地躺著招拙,像睡著了一般唧瘾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上别凤,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天饰序,我揣著相機與錄音,去河邊找鬼规哪。 笑死求豫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诉稍。 我是一名探鬼主播蝠嘉,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼杯巨!你這毒婦竟也來了蚤告?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舔箭,失蹤者是張志新(化名)和其女友劉穎罩缴,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體层扶,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡箫章,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镜会。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檬寂。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖戳表,靈堂內(nèi)的尸體忽然破棺而出桶至,到底是詐尸還是另有隱情,我是刑警寧澤匾旭,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布镣屹,位于F島的核電站,受9級特大地震影響价涝,放射性物質(zhì)發(fā)生泄漏女蜈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一色瘩、第九天 我趴在偏房一處隱蔽的房頂上張望伪窖。 院中可真熱鬧,春花似錦居兆、人聲如沸覆山。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽簇宽。三九已至勋篓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晦毙,已是汗流浹背生巡。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留见妒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓甸陌,卻偏偏與公主長得像须揣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钱豁,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 1 場景問題# 1.1 訂閱報紙的過程## 來考慮實際生活中訂閱報紙的過程耻卡,這里簡單總結(jié)了一下,訂閱報紙的基本流程...
    七寸知架構(gòu)閱讀 4,621評論 5 57
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理牲尺,服務(wù)發(fā)現(xiàn)卵酪,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,110評論 25 707
  • 設(shè)計模式基本原則 開放-封閉原則(OCP)谤碳,是說軟件實體(類溃卡、模塊、函數(shù)等等)應(yīng)該可以拓展蜒简,但是不可修改瘸羡。開-閉原...
    西山薄涼閱讀 3,797評論 3 14
  • 這篇大概就是說得這一系列文章的由來。 因為創(chuàng)業(yè)才半路出家做軟件開發(fā)搓茬,后來又進了國企做開發(fā)工程師(第三方技服)前前后...
    我變禿了也變強了閱讀 145評論 0 1