AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

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

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

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

下面是對上述步驟的更詳細的講解:87728資訊網——每日最新資訊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。最后,在客戶端代碼中,我們創建了具體的主題和觀察者對象,將觀察者添加到主題中,并演示了狀態變化時如何通知觀察者,以及如何移除觀察者。87728資訊網——每日最新資訊28at.com

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

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

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

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

標簽:
  • 熱門焦點
Top