国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【設計模式】觀察者模式

這篇具有很好參考價值的文章主要介紹了【設計模式】觀察者模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是觀察者模式?

觀察者模式(又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,屬于行為型模式的一種,它定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。

觀察者模式的角色:

Subject:抽象主題(被觀察者),每一個主題可以有多個觀察者,并將所有觀察者對象的引用保存在一個集合里,被觀察者提供一個接口,可以增加和刪除觀察者角色

ConcreteSubject:具體主題,將有關狀態(tài)存入具體觀察者對象,在主題發(fā)生改變時,給所有的觀察者發(fā)出通知

Observer:抽象觀察者,為所有的具體觀察者定義一個更新接口,該接口的作用是在收到主題的通知時能夠及時的更新自己

ConcreteObserver:具體觀察者,實現(xiàn)抽象觀察者角色定義的更新接口,以便使本身的狀態(tài)與主題狀態(tài)相協(xié)調(diào)。如果需要,具體觀察者角色可以保存一個指向具體主題角色的引用。

參考來自設計模式(五)觀察者模式,作者:劉望舒

觀察者模式的使用場景:

觀察者模式是一種對象行為型模式,它通常用于以下場景:

  • 消息服務器系統(tǒng)。
  • 社交媒體平臺。
  • 郵件系統(tǒng)。
  • 圖形界面應用程序。
  • 游戲。
  • 實現(xiàn)團隊協(xié)作,提高工作效率。
  • 觀察者模式可以在不同對象之間創(chuàng)建有效關系,從而更有效地開發(fā)高質(zhì)量軟件。

具體實現(xiàn):

假設有這么一個場景:我是B站up主,有很多粉絲關注我,我發(fā)視頻了,他們就會點贊我,我發(fā)癲了(說些不好的話)他們就會取關我。
在這種場景下,就很使用觀察者模式,粉絲們關注我,根據(jù)我的狀態(tài)而動態(tài)地做出反應。

觀察者的接口

public interface MyObserver {
    void execute(String upName);
}

觀察者對象

public class fans implements MyObserver {

    private String name;

    public fans(String name){
        this.name = name;
    }
    // 根據(jù)msg動態(tài)地執(zhí)行方法
    @Override
    public void execute(String msg) {
        if("更新了".equals(msg)){
            System.out.println(this.name+"點贊了你");
        }
        if("發(fā)癲了".equals(msg)){
            System.out.println(this.name+"舉報了你");
        }
    }
}

被觀察者接口

public interface SupObject {

    // 將粉絲增加在通知列表
    void add(MyObserver myObserver);

    // 將粉絲刪除出通知列表
    void delete(MyObserver myObserver);

    // 通知
    void notify(String upName);
}

被觀察者對象

public class up implements SupObject{

    List<MyObserver> notifyList = new ArrayList<>();

    @Override
    public void add(MyObserver myObserver) {
        notifyList.add(myObserver);
    }

    @Override
    public void delete(MyObserver myObserver) {
        notifyList.remove(myObserver);
    }

    @Override
    public void notify(String msg) {

        notifyList.forEach(t-> t.execute(msg));
    }
}

執(zhí)行器

public class client {
    public static void main(String[] args) {

        fans fans1 = new fans("小約翰可汗");
        fans fans2 = new fans("CSGO玩機器");
        fans fans3 = new fans("徐云流浪中國");

        up up = new up();
        up.add(fans1);
        up.add(fans2);
        up.add(fans3);

        up.notify("更新了");
    }
}

效果:

【設計模式】觀察者模式,設計模式,觀察者模式

觀察者模式的優(yōu)缺點:

優(yōu)點

解除耦合,讓耦合的雙方都依賴于抽象,從而使得各自的變換都不會影響另一邊的變換。

缺點

在應用觀察者模式時需要考慮一下開發(fā)效率和運行效率的問題,程序中包括一個被觀察者、多個觀察者,開發(fā)、調(diào)試等內(nèi)容會比較復雜,而且在Java中消息的通知一般是順序執(zhí)行,那么一個觀察者卡頓,會影響整體的執(zhí)行效率,在這種情況下,一般會采用異步實現(xiàn)。

觀察者模式和發(fā)布訂閱模式的不同:

通過上面的代碼,可能回產(chǎn)生這樣的疑問?
這不是“被觀察者”主動發(fā)送消息給“觀察者”的嗎?這么叫做觀察者模式呢?主被動關系是不是搞反了?
其實觀察者模式也叫做發(fā)布訂閱模式。
比如《heah in first》中,就曾這么寫

Publishers + Subscribers = Observer Pattern
【設計模式】觀察者模式,設計模式,觀察者模式

但是!他們還是有差別的
在發(fā)布訂閱模式里,發(fā)布者,并不會直接通知訂閱者,換句話說,發(fā)布者和訂閱者,彼此互不相識。
但在觀察者模式中,觀察者與被觀察者是直接通信的。
這就是他們的差別:
觀察者模式主打一個松耦合,但是他們還是耦合的。
但是發(fā)布訂閱模式,完完全全的松開了!文章來源地址http://www.zghlxwxcb.cn/news/detail-637150.html

到了這里,關于【設計模式】觀察者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 設計模式(11)觀察者模式

    設計模式(11)觀察者模式

    一、概述: 1、定義:觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)發(fā)生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。 2、結(jié)構(gòu)圖: 實現(xiàn) ?調(diào)用

    2024年02月11日
    瀏覽(29)
  • 設計模式之觀察者模式

    可以幫你的對象知悉現(xiàn)況,不會錯過該對象感興趣的事。對象甚至在運行時可決定是否要繼續(xù)被通知。 從報紙和雜志的訂閱說起: 報社的業(yè)務就是出版報紙 向某家報社訂閱報紙,只要他們有新報紙出版,就會給你送來。只要你是他們的訂戶,你就會一直收到新報紙。 當你不

    2024年01月24日
    瀏覽(23)
  • 設計模式——14. 觀察者模式

    設計模式——14. 觀察者模式

    觀察者模式(Observer Pattern)是一種行為型設計模式,用于定義對象之間的一對多依賴關系,使得當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都能夠自動收到通知并更新自己的狀態(tài),以保持與被觀察對象的同步。觀察者模式也被稱為發(fā)布-訂閱模式。 觀察者模式包含以

    2024年02月07日
    瀏覽(19)
  • 重溫設計模式 --- 觀察者模式

    觀察者模式 是一種行為型設計模式,它允許對象之間建立一種一對多的關系,使得當一個對象狀態(tài)改變時,所有依賴它的對象都能夠自動得到通知并更新自己的狀態(tài)。該模式可以幫助我們實現(xiàn)松耦合的系統(tǒng),以便更好地應對變化和擴展。 在觀察者模式中,有兩個角色: 觀察

    2024年02月13日
    瀏覽(21)
  • 觀察者設計模式

    觀察者設計模式

    行為型模式(Behavioral Patterns):這類模式主要關注對象之間的通信。它們 分別是: 職責鏈模式(Chain of Responsibility) 命令模式(Command) 解釋器模式(Interpreter) 迭代器模式(Iterator) 中介者模式(Mediator) 備忘錄模式(Memento) 觀察者模式(Observer) 狀態(tài)模式(State) 策略

    2024年01月24日
    瀏覽(24)
  • 設計模式-觀察者

    設計模式-觀察者

    觀察者模式是一種廣泛應用于軟件開發(fā)中的行為設計模式,尤其是在面向?qū)ο缶幊蹋∣OP)中。該模式定義了對象之間的一對多依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都會得到通知并自動更新 在觀察者模式中,存在兩個主要角色: 主題(Subject) 或 被

    2024年01月22日
    瀏覽(23)
  • 設計模式:行為型模式 - 觀察者模式

    設計模式:行為型模式 - 觀察者模式

    定義: 又被稱為發(fā)布-訂閱(Publish/Subscribe)模式,它定義了一種一對多的依賴關系,讓多個觀察者對象同時監(jiān)聽某一個主題對象。這個主題對象在狀態(tài)變化時,會通知所有的觀察者對象,使他們能夠自動更新自己。 在觀察者模式中有如下角色: Subject:抽象主題(抽象被觀察

    2023年04月22日
    瀏覽(28)
  • 設計模式【行為型】-- 觀察者模式

    觀察者模式(Observer Pattern)是一種行為型設計模式,用于在對象之間建立一種一對多的依賴關系,使得當一個對象狀態(tài)改變時,其相關依賴對象都能得到通知并自動更新。 主題( Subject ):也稱為被觀察者,它維護一個觀察者列表,并提供添加、刪除和通知觀察者的方法。

    2024年02月15日
    瀏覽(25)
  • Java 設計模式——觀察者模式

    Java 設計模式——觀察者模式

    觀察者模式 (Observer Pattern) 是一種行為型設計模式,又被稱為發(fā)布-訂閱 (Publish/Subscribe) 模式, 它定義了對象之間的一種一對多的依賴關系,使得當一個對象的狀態(tài)發(fā)生變化時,所有依賴于它的對象都會自動收到通知并更新 。 在觀察者模式中有如下角色: Subject:觀察對象 ,

    2024年02月16日
    瀏覽(23)
  • 設計模式—觀察者模式(Observer)

    設計模式—觀察者模式(Observer)

    目錄 思維導圖 一、什么是觀察者模式? 二、有什么優(yōu)點嗎? 三、有什么缺點嗎? 四、什么時候使用觀察者模式? 五、代碼展示 ①、雙向耦合的代碼 ②、解耦實踐一 ③、解耦實踐二 ④、觀察者模式 六、這個模式涉及到了哪些知識點? 又叫發(fā)布-訂閱(publish/Subscrib)模式

    2024年02月11日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包