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

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

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式【行為型】-- 觀察者模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

觀察者模式(Observer Pattern)

觀察者模式(Observer Pattern)是一種行為型設(shè)計(jì)模式,用于在對(duì)象之間建立一種一對(duì)多的依賴關(guān)系,使得當(dāng)一個(gè)對(duì)象狀態(tài)改變時(shí),其相關(guān)依賴對(duì)象都能得到通知并自動(dòng)更新。

概念:

  1. 主題(Subject):也稱為被觀察者,它維護(hù)一個(gè)觀察者列表,并提供添加、刪除和通知觀察者的方法。
  2. 觀察者(Observer):它定義了一個(gè)接口,當(dāng)主題狀態(tài)改變時(shí)會(huì)被通知,并執(zhí)行相應(yīng)的更新操作。
  3. 具體主題(ConcreteSubject):實(shí)現(xiàn)主題接口,當(dāng)狀態(tài)發(fā)生變化時(shí),通知其注冊(cè)的觀察者。
  4. 具體觀察者(ConcreteObserver):實(shí)現(xiàn)觀察者接口,定義在接收到通知時(shí)所進(jìn)行的更新操作。

優(yōu)點(diǎn):

  1. 解耦:觀察者模式能夠讓主題與觀察者之間解耦,使得它們可以獨(dú)立地進(jìn)行擴(kuò)展和變化。
  2. 易擴(kuò)展:可以靈活地增加新的觀察者,無需修改主題代碼。
  3. 通知機(jī)制:當(dāng)對(duì)象之間存在一對(duì)多關(guān)系時(shí),觀察者模式能夠提供一種簡單的通知機(jī)制,保證相關(guān)對(duì)象及時(shí)更新。

缺點(diǎn):

  1. 過多的更新:如果觀察者較多且更新操作較復(fù)雜,可能導(dǎo)致性能問題。
  2. 循環(huán)依賴:觀察者和主題之間的循環(huán)依賴需謹(jǐn)慎處理,避免導(dǎo)致循環(huán)調(diào)用。

使用場(chǎng)景:

  1. 當(dāng)一個(gè)對(duì)象的改變需要同時(shí)改變其他對(duì)象,并且不知道有多少對(duì)象需要改變時(shí),可以考慮使用觀察者模式。
  2. 當(dāng)一個(gè)抽象模型有兩個(gè)方面,其中一個(gè)方面依賴于另一個(gè)方面,將這兩者封裝在獨(dú)立的對(duì)象中可以使用觀察者模式實(shí)現(xiàn)解耦。

示例案例:新聞發(fā)布訂閱系統(tǒng)

假設(shè)我們有一個(gè)新聞發(fā)布訂閱系統(tǒng),包含以下角色:

  • 主題(Subject):新聞發(fā)布者,維護(hù)一個(gè)訂閱者列表,并提供添加、刪除和通知訂閱者的方法。
  • 觀察者(Observer):新聞?dòng)嗛喺?,定義了接收新聞更新的方法。
  • 具體主題(ConcreteSubject):具體的新聞發(fā)布者,繼承主題接口,實(shí)現(xiàn)添加、刪除和通知訂閱者的方法。
  • 具體觀察者(ConcreteObserver):具體的新聞?dòng)嗛喺?,?shí)現(xiàn)觀察者接口,定義接收新聞更新的方法。
// 主題接口
interface Subject {
    void addObserver(Observer observer);
    void removeObserver(Observer observer);
    void notifyObservers(String news);
}

// 觀察者接口
interface Observer {
    void update(String news);
}

// 具體主題
class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();

    @Override
    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers(String news) {
        for (Observer observer : observers) {
            observer.update(news);
        }
    }
}

// 具體觀察者
class ConcreteObserver implements Observer {
    private String name;

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

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

// 測(cè)試代碼
public class ObserverPatternExample {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        
        Observer observer1 = new ConcreteObserver("Subscriber 1");
        Observer observer2 = new ConcreteObserver("Subscriber 2");
        
        subject.addObserver(observer1);
        subject.addObserver(observer2);
        
        subject.notifyObservers("Breaking News: COVID-19 Update!");
        
        subject.removeObserver(observer2);
        
        subject.notifyObservers("Sports News: Team A wins the championship!");
    }
}

在上面的例子中,新聞發(fā)布者和訂閱者之間的關(guān)系被解耦,當(dāng)新聞發(fā)布者發(fā)布新聞時(shí),所有訂閱者都會(huì)收到通知并進(jìn)行相應(yīng)的更新操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-607008.html

到了這里,關(guān)于設(shè)計(jì)模式【行為型】-- 觀察者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

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

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

    2024年01月24日
    瀏覽(27)
  • c#設(shè)計(jì)模式-行為型模式 之 觀察者模式

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

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

    2024年02月14日
    瀏覽(22)
  • C++設(shè)計(jì)模式行為型之觀察者模式

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

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

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

    2024年02月12日
    瀏覽(25)
  • 設(shè)計(jì)模式——觀察者模式

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

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

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

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

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

    2024年02月13日
    瀏覽(20)
  • 設(shè)計(jì)模式---觀察者模式

    1,概念 ????????屬于行為模式的一種,定義了一種一對(duì)多的依賴關(guān)系,讓多個(gè)觀察者對(duì)象同時(shí)監(jiān)聽某一對(duì)象主題對(duì)象,這個(gè)主題對(duì)象在狀態(tài)變化時(shí),會(huì)通知所有的觀察者對(duì)象,使他們能夠自動(dòng)更新自己。 在觀察者模式中有如下角色: Subject:抽象主題(抽象被觀察者),

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

    觀察者模式是一種行為型設(shè)計(jì)模式,它定義了一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),其所有依賴者都會(huì)收到通知并自動(dòng)更新。當(dāng)對(duì)象間存在一對(duì)多關(guān)系時(shí),則使用觀察者模式(Observer Pattern)。比如,當(dāng)一個(gè)對(duì)象被修改時(shí),則會(huì)自動(dòng)通知依賴它的對(duì)象。觀察者

    2024年02月15日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包