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

C++設計模式行為型之觀察者模式

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

一、概述

????????觀察者模式定義對象間的一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。

二、示例代碼

#include <list>

class Subject;

class Observer
{
public:
?? ?virtual ~Observer();
?? ?virtual void Update(Subject* theChangedSubject) = 0;
protected:
?? ?Observer();
};

class Subject
{
public:
?? ?virtual ~Subject(){}
?? ?virtual void Attach(Observer* o)
?? ?{
?? ??? ?_observers->push_back(o);
?? ?}
?? ?virtual void Detach(Observer* o)
?? ?{
?? ??? ?_observers->remove(o);
?? ?}
?? ?virtual void Notity()
?? ?{
?? ??? ?std::list<Observer*>::iterator it = _observers->begin();
?? ??? ?while (it != _observers->end())
?? ??? ?{
?? ??? ??? ?(*it)->Update(this);
?? ??? ??? ?++it;
?? ??? ?}
?? ?}
protected:
?? ?Subject();
private:
?? ?std::list<Observer*> *_observers;
};

上述代碼是一個簡單的觀察者設計模式代碼,邏輯清晰,但這種不能夠通用,只能對特定的觀察者才有效,即必須是Observer抽象類的派生類才行,并且這個觀察者還不能帶參數(shù),而且接口參數(shù)不支持變化,那么觀察者將不能應付接口的變化。那么應該如何解決這個問題呢?可以使用C++11一些特性來改變。

class NonCopyable
{
protected:
?? ?NonCopyable() = default;
?? ?~NonCopyable() = default;
?? ?NonCopyable(const NonCopyable&) = delete; //禁用拷貝構造
?? ?NonCopyable& operator = (const NonCopyable&) = delete; //禁用賦值構造
};

#include <iostream>
#include <string>
#include <functional>
#include <map>

using namespace std;

template<typename Func>
class Events : NonCopyable
{
public:
?? ?Events(){}
?? ?~Events(){}
?? ?//注冊觀察者,支持右值
?? ?int Connect(Func&& f)
?? ?{
?? ??? ?return Assgin(f);
?? ?}
?? ?//注冊觀察者
?? ?int Connect(Func& f)
?? ?{
?? ??? ?return Assgin(f);
?? ?}
?? ?//移除觀察者
?? ?void Disconnect(int key)
?? ?{
?? ??? ?m_connections.erase(key);
?? ?}
private:
?? ?//保存觀察者并分配觀察者編號
?? ?template<typename F>
?? ?int Assgin(F&& f)
?? ?{
?? ??? ?int k = m_observerId++;
?? ??? ?m_connections.emplace(k, std::forward<F> (f));
?? ?}
?? ?int m_observerId = 0;
?? ?std::map<int, Func> m_connections;
};

C++11實現(xiàn)的觀察者,內(nèi)部為了一個泛型函數(shù)列表,觀察者只需要將觀察者函數(shù)進行注冊進來即可,消除了繼承導致的強耦合。通知接口使用了可變參數(shù)模板,支持任意參數(shù),這就消除了接口變化的影響。文章來源地址http://www.zghlxwxcb.cn/news/detail-627397.html

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

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

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

相關文章

  • 設計模式—行為型模式之觀察者模式

    設計模式—行為型模式之觀察者模式

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

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

    設計模式之觀察者模式【行為型模式】

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

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

    行為型設計模式之觀察者模式【設計模式系列】

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

    2024年02月15日
    瀏覽(19)
  • 【行為型設計模式】C#設計模式之觀察者模式

    參考代碼:

    2024年02月13日
    瀏覽(26)
  • c#設計模式-行為型模式 之 觀察者模式

    c#設計模式-行為型模式 之 觀察者模式

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

    2024年02月14日
    瀏覽(23)
  • 笨蛋學設計模式行為型模式-觀察者模式【14】

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

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

    C++ 設計模式之觀察者模式

    【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com)) 【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】 【設計模式大綱】 ?????????前面的文章介紹了創(chuàng)建型模式和結構型模式,今天開始介紹行為型模式。 【簡介】什么是觀察者模式 (第13種模式) ????

    2024年01月16日
    瀏覽(23)
  • 【設計模式】Head First 設計模式——觀察者模式 C++實現(xiàn)

    設計模式最大的作用就是在變化和穩(wěn)定中間尋找隔離點,然后分離它們,從而管理變化。將變化像小兔子一樣關到籠子里,讓它在籠子里隨便跳,而不至于跳出來把你整個房間給污染掉。 主題對象(出版者)管理某些數(shù)據(jù),當主題內(nèi)的數(shù)據(jù)改變,就會通知觀察者(訂閱者)。

    2024年02月10日
    瀏覽(27)
  • 【C++ 觀察者模式 思想理解】C++中的觀察者模式:松耦合設計與動態(tài)交互的藝術,合理使用智能指針觀察者

    【C++ 觀察者模式 思想理解】C++中的觀察者模式:松耦合設計與動態(tài)交互的藝術,合理使用智能指針觀察者

    在進入技術細節(jié)之前,理解觀察者模式(Observer Pattern)的基本概念和它在現(xiàn)代編程中的重要性是至關重要的。 觀察者模式是一種設計模式,它定義了對象間的一種一對多的依賴關系,當一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并自動更新。在C++中,這個

    2024年01月24日
    瀏覽(48)
  • 設計模式(四) —— 觀察者模式/發(fā)布訂閱模式,c和c++示例代碼

    往期地址: 設計模式(一)——簡單工廠模式 設計模式(二)——策略模式 設計模式(三)——裝飾模式 本期主題: 使用c和c++代碼,講解觀察者模式、發(fā)布訂閱模式 發(fā)布-訂閱模式是一種行為設計模式,它允許多個對象通過事件的發(fā)布和訂閱來進行通信; 在這種模式中,

    2023年04月17日
    瀏覽(93)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包