发布-订阅模式核心代码练习:
实现以下参与者:
EventObject
事件对象,用于参数传递
EventSource
事件源,用于触发事件
SubscriberTemplate
订阅器模板,保存客户代码
特殊需求:采用模板实现可定制的客户代码。
心得:
1、为了在 SubscriberTemplate 层面使invoker 的类型无关,使用了 模板构造函数 和 MemberFunctionBounder ,将 invoker 的类型确定时机推到了 MemberFunctionBounder 层。
2、为了能在 SubscriberTemplate 调用客户代码,将 invoker 无关的接口抽象,形成 FunctionBounderBase 层。
3、为了保证 SubscriberTemplate 在赋值、拷贝、删除的时候对 bounder 对象的管理, 在 FunctionBounderBase 层添加了 clone 方法。
扩展:
1、支持非成员函数的客户代码。
2、支持非返回值的客户代码。
3、完善事件触发机制,添加注册、查找事件的功能。