日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

用C++11打造智能觀察者模式:詳解實現步驟完整示例代碼

來源: 責編: 時間:2024-04-08 08:57:54 174觀看
導讀觀察者模式是一種行為設計模式,其中一個對象(主題)維護其依賴對象(觀察者)的列表,當主題的狀態發生變化時,它通知所有觀察者。以下是一個使用C++11實現觀察者模式的簡單例子:定義觀察者接口(Observer): 創建一個觀察者接口,該接口

UXh28資訊網——每日最新資訊28at.com

觀察者模式是一種行為設計模式,其中一個對象(主題)維護其依賴對象(觀察者)的列表,當主題的狀態發生變化時,它通知所有觀察者。以下是一個使用C++11實現觀察者模式的簡單例子:UXh28資訊網——每日最新資訊28at.com

  • 定義觀察者接口(Observer): 創建一個觀察者接口,該接口包含觀察者需要實現的更新方法。這個接口可以包含其他方法,但更新方法是必須的。
  • 創建具體觀察者類: 實現觀察者接口的具體類。每個具體觀察者類都應該實現更新方法,該方法定義了在主題狀態變化時觀察者應該執行的操作。
  • 定義主題接口(Subject): 創建一個主題接口,該接口包含了添加、移除和通知觀察者的方法。這里可以選擇在主題接口中定義更新狀態的方法,也可以在具體主題類中定義。
  • 創建具體主題類: 實現主題接口的具體類。該類應該維護一個觀察者列表,并在狀態變化時通知所有觀察者。
  • 實現客戶端代碼: 在客戶端代碼中創建具體的主題和觀察者對象,將觀察者添加到主題中。客戶端還負責觸發主題狀態的變化,從而通知觀察者。

下面是對上述步驟的更詳細的講解:UXh28資訊網——每日最新資訊28at.com

步驟 1:定義觀察者接口

// Observer.h#pragma onceclass Observer {public:    virtual void update(int data) = 0;};

步驟 2:創建具體觀察者類

// ConcreteObserverA.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverA : public Observer {public:    void update(int data) override {        std::cout << "Observer A 收到更新,數據為: " << data << std::endl;    }};
// ConcreteObserverB.h#pragma once#include <iostream>#include "Observer.h"class ConcreteObserverB : public Observer {public:    void update(int data) override {        std::cout << "Observer B 收到更新,數據為: " << data << std::endl;    }};

步驟 3:定義主題接口

// Subject.h#pragma once#include "Observer.h"class Subject {public:    virtual void addObserver(Observer* observer) = 0;    virtual void removeObserver(Observer* observer) = 0;    virtual void notifyObservers(int data) = 0;};

步驟 4:創建具體主題類

// ConcreteSubject.h#pragma once#include <vector>#include "Subject.h"class ConcreteSubject : public Subject {private:    std::vector<Observer*> observers;    int data;public:    void addObserver(Observer* observer) override {        observers.push_back(observer);    }    void removeObserver(Observer* observer) override {        observers.erase(std::remove(observers.begin(), observers.end(), observer), observers.end());    }    void notifyObservers(int data) override {        for (Observer* observer : observers) {            observer->update(data);        }    }    void setData(int newData) {        data = newData;        notifyObservers(data);    }    int getData() const {        return data;    }};

步驟 5:實現客戶端代碼

// main.cpp#include "ConcreteObserverA.h"#include "ConcreteObserverB.h"#include "ConcreteSubject.h"int main() {    ConcreteSubject subject;    ConcreteObserverA observerA;    ConcreteObserverB observerB;    subject.addObserver(&observerA);    subject.addObserver(&observerB);    subject.setData(123);    subject.removeObserver(&observerA);    subject.setData(456);    return 0;}

在這個例子中,我們創建了抽象觀察者類 Observer,具體觀察者類 ConcreteObserverA  ConcreteObserverB。然后,我們定義了抽象主題類 Subject 和具體主題類 ConcreteSubject。最后,在客戶端代碼中,我們創建了具體的主題和觀察者對象,將觀察者添加到主題中,并演示了狀態變化時如何通知觀察者,以及如何移除觀察者。UXh28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-81867-0.html用C++11打造智能觀察者模式:詳解實現步驟完整示例代碼

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 掌握.Net桌面開發的精髓之一:句柄,一種特殊的數據類型

下一篇: 如果你還不理解 RBAC,看看 Jenkins 如何做到的

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 官方承諾:K60至尊版將會首批升級MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版將會搭載天璣9200+處理器和獨顯芯片X7的同時,Redmi給出了官方承諾,K60至尊重大更新首批升級,會首批推送MIUI 15。也就是說雖然
  • 中興AX5400Pro+上手體驗:再升級 雙2.5G網口+USB 3.0這次全都有

    2021年11月的時候,中興先后發布了兩款路由器產品,中興AX5400和中興AX5400 Pro,從產品命名上就不難看出這是隸屬于同一系列的,但在外觀設計上這兩款產品可以說是完全沒一點關系
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 之家push系統迭代之路

    前言在這個信息爆炸的互聯網時代,能夠及時準確獲取信息是當今社會要解決的關鍵問題之一。隨著之家用戶體量和內容規模的不斷增大,傳統的靠"主動拉"獲取信息的方式已不能滿足用
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 華為和江淮汽車合作開發百萬元問界MPV?雙方回應來了

    8月1日消息,郭明錤今天在社交平臺發文稱,華為正在和江淮汽車合作,開發售價在100萬元的問界MPV,預計在2024年第2季度量產,銷量目標為上市首年交付5萬輛。
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top 主站蜘蛛池模板: 兰州市| 芜湖县| 湛江市| 长春市| 正镶白旗| 秀山| 西宁市| 江门市| 北安市| 安乡县| 襄汾县| 张掖市| 乌审旗| 台东市| 大丰市| 抚宁县| 屯门区| 子洲县| 闵行区| 深泽县| 云梦县| 叙永县| 芜湖县| 兰西县| 尉犁县| 邻水| 普兰店市| 谷城县| 天水市| 阜南县| 星子县| 沧州市| 抚州市| 崇阳县| 西和县| 江西省| 会宁县| 江北区| 姜堰市| 买车| 安吉县|