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

c#設(shè)計模式-行為型模式 之 觀察者模式

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

定義:

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

在觀察者模式中有如下角色:

  1. Subject:抽象主題(抽象被觀察者),抽象主題角色把所有觀察者對象保存在一個集合里,每 個主題都可以有任意數(shù)量的觀察者,抽象主題提供一個接口,可以增加和刪除觀察者對象。
  2. ConcreteSubject:具體主題(具體被觀察者),該角色將有關(guān)狀態(tài)存入具體觀察者對象,在具 體主題的內(nèi)部狀態(tài)發(fā)生改變時,給所有注冊過的觀察者發(fā)送通知。
  3. Observer:抽象觀察者,是觀察者的抽象類,它定義了一個更新接口,使得在得到主題更改通知 時更新自己。
  4. ConcrereObserver:具體觀察者,實現(xiàn)抽象觀察者定義的更新接口,以便在得到主題更改通知 時更新自身的狀態(tài)。

案例

這里案例使用一個委托進(jìn)行多播來進(jìn)行對熱水器的觀察

加熱器類

首先定義一個全局變量,溫度temperature,然后使用event聲明一個事件,委托名稱使用無返回值的Action,參數(shù)為int。然后寫一個for循環(huán)模擬燒水,溫度temperature大于95時,執(zhí)行事件。

public class HeaterSubject
{
    private int _temperature;

    public event Action<int> OnBoilEvent;

    public void BoilWater()
    {
        for (int i = 0; i < 100; i++)
        {
            _temperature++;
            
            if (_temperature >= 95)
            {
                OnBoilEvent.Invoke(_temperature);//觸發(fā)事件:發(fā)出警報,顯示水溫
            }
        }
    }
}

監(jiān)視者

熱水器上一般都有顯示屏和警報器,這里模擬兩個觀察者,分別是顯示器和警報器

因為上面聲明的委托參數(shù)是int,這里的觀察者參數(shù)也要匹配,等一下才可以通過多播的形式插入

public class DisPlayObserver
{
    /// <summary>
    /// 顯示水溫
    /// </summary>
    /// <param name="temperature"></param>
    public void Display(int temperature)
    {
        Console.WriteLine($"顯示屏-當(dāng)前溫度是:{temperature}");
    }
}
public class AlertObserver
{
    /// <summary>
    /// 發(fā)出警報
    /// </summary>
    /// <param name="temperature"></param>
    public void MakeAlert(int temperature)
    {
        Console.WriteLine($"語音報警器-溫度是{temperature}");
    }
}

main方法

在main方法中,實現(xiàn)new一個熱水器的實例,然后使用多播將多個方法綁定到一個委托實例。當(dāng)調(diào)用此類委托時,所有綁定的方法會被一次全部調(diào)用,最后調(diào)用熱水器的燒水方法

    public static void Main(string[] args)
    {
        HeaterSubject subject = new HeaterSubject();
        //訂閱發(fā)出警報
        subject.OnBoilEvent += new AlertObserver().MakeAlert;
        //訂閱顯示水溫
        subject.OnBoilEvent += new DisPlayObserver().Display;
        
        subject.BoilWater();
    }

c#設(shè)計模式-行為型模式 之 觀察者模式,c#設(shè)計模式,設(shè)計模式,觀察者模式

?多播的優(yōu)缺點

  1. 優(yōu)點: 降低了目標(biāo)與觀察者之間的耦合關(guān)系,兩者之間是抽象耦合關(guān)系。 被觀察者發(fā)送通知,所有注冊的觀察者都會收到信息【可以實現(xiàn)廣播機(jī)制】
  2. 缺點: 如果觀察者非常多的話,那么所有的觀察者收到被觀察者發(fā)送的通知會耗時 如果被觀察者有循環(huán)依賴的話,那么被觀察者發(fā)送通知會使觀察者循環(huán)調(diào)用,會導(dǎo)致系統(tǒng)崩潰

?使用場景

  1. 對象間存在一對多關(guān)系,一個對象的狀態(tài)發(fā)生改變會影響其他對象。
  2. 當(dāng)一個抽象模型有兩個方面,其中一個方面依賴于另一方面時。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-634356.html

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

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式—行為型模式之觀察者模式

    設(shè)計模式—行為型模式之觀察者模式

    觀察者模式(Observer Pattern):定義對象間的一種一對多依賴關(guān)系,使得每當(dāng)一個對象狀態(tài)發(fā)生改變時,其相關(guān)依賴對象皆得到通知并被自動更新。觀察者模式又叫做發(fā)布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監(jiān)聽器(Source/Listener)模式或從屬者(Dependent

    2024年01月22日
    瀏覽(27)
  • 設(shè)計模式之觀察者模式【行為型模式】

    設(shè)計模式之觀察者模式【行為型模式】

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識點… 一個人摸索學(xué)習(xí)很難堅持,想組團(tuán)高效學(xué)習(xí)… 想寫博

    2024年02月03日
    瀏覽(21)
  • 行為型設(shè)計模式之觀察者模式【設(shè)計模式系列】

    行為型設(shè)計模式之觀察者模式【設(shè)計模式系列】

    C++技能系列 Linux通信架構(gòu)系列 C++高性能優(yōu)化編程系列 深入理解軟件架構(gòu)設(shè)計系列 高級C++并發(fā)線程編程 設(shè)計模式系列 期待你的關(guān)注哦?。?! 現(xiàn)在的一切都是為將來的夢想編織翅膀,讓夢想在現(xiàn)實中展翅高飛。 Now everything is for the future of dream weaving wings, let the dream fly in reali

    2024年02月15日
    瀏覽(19)
  • 笨蛋學(xué)設(shè)計模式行為型模式-觀察者模式【14】

    8.1.1概念 ? 觀察者模式定義了一種一對多的依賴關(guān)系,讓多個觀察者對象同時監(jiān)聽某一個主題對象,當(dāng)主題對象狀態(tài)發(fā)生變化時,會通知所有依賴它的觀察者對象,使它們都能夠得到通知并且被自動更新 8.1.2場景 ? 在我們生活中,用戶可以在音樂播放平臺關(guān)注多個歌手,而

    2024年01月24日
    瀏覽(29)
  • C++設(shè)計模式行為型之觀察者模式

    一、 概述 ????????觀察者模式定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。 二、 示例代碼 #include list class Subject; class Observer { public: ?? ?virtual ~Observer(); ?? ?virtual void Update(Subject* theChangedSubject) =

    2024年02月14日
    瀏覽(27)
  • 深入理解設(shè)計模式-行為型之觀察者

    觀察者模式(Observer Pattern)是一種行為型設(shè)計模式,它定義了一種 一對多的依賴關(guān)系 ,讓 多個觀察者對象 同時監(jiān)聽一個 主題對象 ,當(dāng) 主題對象 發(fā)生 變化 時,所有依賴于它的 觀察者 對象都會得到 通知并更新。 在觀察者模式中,有兩個主要角色: Subject(主題):維護(hù)

    2024年02月12日
    瀏覽(25)
  • C#設(shè)計模式之觀察者模式

    觀察者(Observer)模式也稱發(fā)布-訂閱(Publish-Subscribe)模式,定義了對象間一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。 觀察者模式的圖解如下所示: Subject(目標(biāo)): 目標(biāo)知道它的觀察者。可以有任意多個觀察者觀察

    2024年02月03日
    瀏覽(22)
  • C#設(shè)計模式之---觀察者模式

    觀察者模式(Observer Pattern)是一種對象行為模式。它定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。在觀察者模式中,主體是通知的發(fā)布者,它發(fā)出通知時并不需要知道誰是它的觀察者,可以有任意數(shù)目的

    2024年02月16日
    瀏覽(24)
  • 設(shè)計模式——觀察者模式

    設(shè)計模式——觀察者模式

    觀察者模式可以分為觀察者和被觀察者,觀察者通過注冊到一個被觀察者中,也可視為訂閱,當(dāng)被觀察者的數(shù)據(jù)發(fā)生改變時,會通知到觀察者,觀察者可以據(jù)此做出反應(yīng)。 可以類比訂閱報紙,報社就是被觀察者,訂閱者就是觀察者,訂閱者通過訂閱報紙與報社建立聯(lián)系,而報

    2024年02月15日
    瀏覽(18)
  • 【設(shè)計模式】觀察者模式

    【設(shè)計模式】觀察者模式

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

    2024年02月13日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包