观察者模式-Observer Pattern
? 1.主要優(yōu)點(diǎn)
????? 觀察者模式的主要優(yōu)點(diǎn)如下:
????? (1) 觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,定義了穩(wěn)定的消息更新傳遞機(jī)制,并抽象了更新接口,使得可以有各種各樣不同的表示層充當(dāng)具體觀察者角色。
????? (2) 觀察者模式在觀察目標(biāo)和觀察者之間建立一個(gè)抽象的耦合。觀察目標(biāo)只需要維持一個(gè)抽象觀察者的集合,無須了解其具體觀察者。由于觀察目標(biāo)和觀察者沒有緊密地耦合在一起,因此它們可以屬于不同的抽象化層次。
????? (3) 觀察者模式支持廣播通信,觀察目標(biāo)會(huì)向所有已注冊(cè)的觀察者對(duì)象發(fā)送通知,簡(jiǎn)化了一對(duì)多系統(tǒng)設(shè)計(jì)的難度。
????? (4) 觀察者模式滿足“開閉原則”的要求,增加新的具體觀察者無須修改原有系統(tǒng)代碼,在具體觀察者與觀察目標(biāo)之間不存在關(guān)聯(lián)關(guān)系的情況下,增加新的觀察目標(biāo)也很方便。
????? 2.主要缺點(diǎn)
????? 觀察者模式的主要缺點(diǎn)如下:
????? (1) 如果一個(gè)觀察目標(biāo)對(duì)象有很多直接和間接觀察者,將所有的觀察者都通知到會(huì)花費(fèi)很多時(shí)間。
????? (2) 如果在觀察者和觀察目標(biāo)之間存在循環(huán)依賴,觀察目標(biāo)會(huì)觸發(fā)它們之間進(jìn)行循環(huán)調(diào)用,可能導(dǎo)致系統(tǒng)崩潰。
????? (3) 觀察者模式?jīng)]有相應(yīng)的機(jī)制讓觀察者知道所觀察的目標(biāo)對(duì)象是怎么發(fā)生變化的,而僅僅只是知道觀察目標(biāo)發(fā)生了變化。
????? 3.適用場(chǎng)景
????? 在以下情況下可以考慮使用觀察者模式:
????? (1) 一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴于另一個(gè)方面,將這兩個(gè)方面封裝在獨(dú)立的對(duì)象中使它們可以各自獨(dú)立地改變和復(fù)用。
????? (2) 一個(gè)對(duì)象的改變將導(dǎo)致一個(gè)或多個(gè)其他對(duì)象也發(fā)生改變,而并不知道具體有多少對(duì)象將發(fā)生改變,也不知道這些對(duì)象是誰。
????? (3) 需要在系統(tǒng)中創(chuàng)建一個(gè)觸發(fā)鏈,A對(duì)象的行為將影響B(tài)對(duì)象,B對(duì)象的行為將影響C對(duì)象……,可以使用觀察者模式創(chuàng)建一種鏈?zhǔn)接|發(fā)機(jī)制。
4個(gè)對(duì)象:主題聚合觀察者,觀察者可以用主題的引用,也可以解耦
????? ● Subject(目標(biāo)):目標(biāo)又稱為主題,它是指被觀察的對(duì)象。在目標(biāo)中定義了一個(gè)觀察者集合,一個(gè)觀察目標(biāo)可以接受任意數(shù)量的觀察者來觀察,它提供一系列方法來增加和刪除觀察者對(duì)象,同時(shí)它定義了通知方法notify()。目標(biāo)類可以是接口,也可以是抽象類或具體類。
????? ● ConcreteSubject(具體目標(biāo)):具體目標(biāo)是目標(biāo)類的子類,通常它包含有經(jīng)常發(fā)生改變的數(shù)據(jù),當(dāng)它的狀態(tài)發(fā)生改變時(shí),向它的各個(gè)觀察者發(fā)出通知;同時(shí)它還實(shí)現(xiàn)了在目標(biāo)類中定義的抽象業(yè)務(wù)邏輯方法(如果有的話)。如果無須擴(kuò)展目標(biāo)類,則具體目標(biāo)類可以省略。
????? ● Observer(觀察者):觀察者將對(duì)觀察目標(biāo)的改變做出反應(yīng),觀察者一般定義為接口,該接口聲明了更新數(shù)據(jù)的方法update(),因此又稱為抽象觀察者。
????? ● ConcreteObserver(具體觀察者):在具體觀察者中維護(hù)一個(gè)指向具體目標(biāo)對(duì)象的引用,它存儲(chǔ)具體觀察者的有關(guān)狀態(tài),這些狀態(tài)需要和具體目標(biāo)的狀態(tài)保持一致;它實(shí)現(xiàn)了在抽象觀察者Observer中定義的update()方法。通常在實(shí)現(xiàn)時(shí),可以調(diào)用具體目標(biāo)類的attach()方法將自己添加到目標(biāo)類的集合中或通過detach()方法將自己從目標(biāo)類的集合中刪除。
---------------------
作者:Liuwei-Sunny
來源:CSDN
原文:https://blog.csdn.net/lovelion/article/details/7720382
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
?
轉(zhuǎn)載于:https://www.cnblogs.com/vhyc/p/10078369.html
總結(jié)
以上是生活随笔為你收集整理的观察者模式-Observer Pattern的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqli-labs less11 POS
- 下一篇: 报错注入_sqli-labs less5