通用程式設計能力訓練 發布 訂閱模式

2021-08-23 15:05:35 字數 1455 閱讀 8745

發布-訂閱模式核心**練習:

實現以下參與者:

eventobject

事件物件,用於引數傳遞

eventsource

事件源,用於觸發事件

subscribertemplate

訂閱器模板,儲存客戶**

特殊需求:採用模板實現可定製的客戶**。

心得:1、為了在 subscribertemplate 層面使invoker 的型別無關,使用了 模板建構函式 和 memberfunctionbounder ,將 invoker 的型別確定時機推到了 memberfunctionbounder 層。

2、為了能在 subscribertemplate 呼叫客戶**,將 invoker 無關的介面抽象,形成 functionbounderbase 層。

3、為了保證 subscribertemplate 在賦值、拷貝、刪除的時候對 bounder 物件的管理, 在 functionbounderbase 層新增了 clone 方法。

擴充套件:1、支援非成員函式的客戶**。

2、支援非返回值的客戶**。

3、完善事件觸發機制,新增註冊、查詢事件的功能。

// 123.cpp : 定義控制台應用程式的入口點。 // #include "stdafx.h" #include templatestruct functionbounderbase virtual ret operator ()(arg) = 0; virtual functionbounderbase* clone() = 0; }; templatestruct memberfunctionbounder : functionbounderbase ret operator()(arg arg) functionbounderbase* clone() memberfunction mem_func; t* invoker; }; templatestruct subscribertemplate ~subscribertemplate() subscribertemplate( const subscribertemplate& other) : bounder(other.bounder->clone()) subscribertemplate& operator =( const subscribertemplate& other) ret operator ()(arg arg) functionbounderbase* bounder; }; struct eventobject ~eventobject(){}; bool m_handled; }; struct eventsource void fireevent(eventobject* e) } subscribers msubscribers; }; struct base }; int _tmain(int argc, _tchar* argv)

通用程式設計能力訓練 發布 訂閱模式

發布 訂閱模式核心 練習 實現以下參與者 eventobject 事件物件,用於引數傳遞 eventsource 事件源,用於觸發事件 subscribertemplate 訂閱器模板,儲存客戶 特殊需求 採用模板實現可定製的客戶 心得 1 為了在 subscribertemplate 層面使 in...

通用程式設計能力訓練 template

目的 寫一套操作攝像機的操作,與具體引擎無關。其中使用到了今天剛看的 template 相關重點。non const getter macros,為了少些 ifndef constgeterhelper h define constgeterhelper h define non const get...

發布 訂閱模式

發布 訂閱模式又叫觀察者模式,它定義物件間的一種一對多的關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都將得到通知。在js中,我們一般用事件模型來替代傳統的發布 訂閱模式。實現 varpubsub function p 訂閱 p.subscribe function flag,fn 發布 p....