成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 后端
觀察者模式是一種行為設計模式,其中一個對象(主題)維護其依賴對象(觀察者)的列表,當主題的狀態發生變化時,它通知所有觀察者。

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

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

下面是對上述步驟的更詳細的講解:

步驟 1:定義觀察者接口

// Observer.h
#pragma once

class 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。最后,在客戶端代碼中,我們創建了具體的主題和觀察者對象,將觀察者添加到主題中,并演示了狀態變化時如何通知觀察者,以及如何移除觀察者。

責任編輯:姜華 來源: 今日頭條
相關推薦

2020-10-26 08:45:39

觀察者模式

2021-07-08 11:28:43

觀察者模式設計

2013-11-26 17:09:57

Android設計模式

2021-09-06 10:04:47

觀察者模式應用

2024-06-04 13:11:52

Python行為設計模式開發

2022-01-29 22:12:35

前端模式觀察者

2021-09-29 19:45:24

觀察者模式Observable

2011-04-29 09:22:22

2012-08-27 10:52:20

.NET架構觀察者模式

2021-03-29 07:14:28

Spring觀察者模式

2024-02-18 12:36:09

2015-11-25 11:10:45

Javascript設計觀察

2024-12-03 09:34:35

觀察者模 式編程Javav

2022-07-13 08:36:57

MQ架構設計模式

2009-03-30 09:39:04

觀察者思想換位設計模式

2021-06-03 12:26:28

觀察者模式面試阿里P6

2021-01-25 05:38:04

設計原理VueSubject

2012-05-21 09:31:56

HTML5

2011-11-21 14:21:56

HTML 5

2021-03-30 15:30:44

鴻蒙HarmonyOS應用開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品自拍av | 91成人精品 | 国产精品一区二区福利视频 | 国产在线一区二区 | 亚洲一区二区三区在线观看免费 | 日韩中文不卡 | 亚洲精品电影网在线观看 | 国内精品久久久久久影视8 最新黄色在线观看 | 日日夜夜草| 黄色片av | 亚洲欧美中文字幕 | 99久久久99久久国产片鸭王 | 夜夜爽99久久国产综合精品女不卡 | 久久久一区二区三区四区 | 国产精品福利在线 | 美女毛片免费看 | 欧美日本一区 | 狠狠干av| www.狠狠干| 久久99国产精一区二区三区 | 亚洲一区不卡在线 | 欧美一区二区三区四区在线 | 亚洲午夜视频 | 亚洲精品视 | 91在线综合 | 国产精品免费一区二区 | 在线国产精品一区 | 国产精品久久久久久久久久久久午夜片 | 日韩快播电影网 | 精品日韩在线 | 午夜视频一区二区 | 欧美精品99| 美女视频一区二区三区 | 精品久久久久久一区二区 | 日韩亚洲欧美综合 | 国产成人精品综合 | 国产91在线播放精品91 | 欧美日产国产成人免费图片 | 午夜不卡一区二区 | 亚洲一区三区在线观看 | 日韩欧美三级电影在线观看 |