網(wǎng)站空間有什么用外貿(mào)網(wǎng)站營(yíng)銷推廣
觀察者設(shè)計(jì)模式,允許對(duì)象在狀態(tài)變化時(shí)通知其他依賴對(duì)象,通常通過(guò)回調(diào)函數(shù)實(shí)現(xiàn)。
在回調(diào)機(jī)制中,可以注冊(cè)多個(gè)回調(diào)函數(shù),以便在特定事件發(fā)生時(shí)依次調(diào)用它們。下面是一個(gè)示例,展示如何在 C++ 中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的事件管理器,支持注冊(cè)多個(gè)回調(diào)函數(shù)。
#include <iostream>
#include <vector>
#include <functional>class EventManager {
public:using EventCallback = std::function<void(int)>; // 定義回調(diào)函數(shù)類型// 注冊(cè)回調(diào)函數(shù)void subscribe(EventCallback callback) {callbacks.push_back(callback);}// 觸發(fā)事件,調(diào)用所有注冊(cè)的回調(diào)函數(shù)void triggerEvent(int value) {for (const auto& callback : callbacks) {callback(value); // 調(diào)用每個(gè)回調(diào)函數(shù)}}private:std::vector<EventCallback> callbacks; // 存儲(chǔ)所有注冊(cè)的回調(diào)函數(shù)
};// 示例回調(diào)函數(shù)
void callbackA(int value) {std::cout << "Callback A received value: " << value << std::endl;
}void callbackB(int value) {std::cout << "Callback B received value: " << value << std::endl;
}void callbackC(int value) {std::cout << "Callback C received value: " << value << std::endl;
}int main() {EventManager manager;// 注冊(cè)多個(gè)回調(diào)函數(shù)manager.subscribe(callbackA);manager.subscribe(callbackB);manager.subscribe(callbackC);// 觸發(fā)事件,所有注冊(cè)的回調(diào)函數(shù)將被調(diào)用manager.triggerEvent(42); // 示例值return 0;
}
?在實(shí)現(xiàn)觀察者模式時(shí),主題對(duì)象(Subject)可以注冊(cè)多個(gè)觀察者(Observer),當(dāng)狀態(tài)變化時(shí),主題會(huì)調(diào)用所有觀察者的回調(diào)函數(shù)。