CEGUI订阅者模式
来源:互联网 发布:西安域名备案代理 编辑:程序博客网 时间:2024/06/15 01:41
我一直在用CEGUI库做游戏的UI,这篇文章主要是记录是CEGUI库的消息发布机制。与其说CEGUI在消息发布上使用的是订阅者模式,倒不如说是“发布者模式”,因为CEGUI使EvenSet类作为一个消息的发布者。而订阅者可以是任何一个对象(绑定到该对象上的成员函数上。),但是CEGUI却不提供一个可靠的订阅者,我在0.8.4 版本的demo上并没有找到作为一个订阅者去维护一个Connection引用,去宝珠其销毁的时候使这些Connection能够disconnect()。但是在设计上作者确实考虑到这种情况去保证他能够去disconect(),因为Connection只是BoundSlot的引用计数。
typedef RefCounted<BoundSlot> Connection;
在应用上,只局限于CEGUI去考虑应该就能理解为什么会这样做了,对于一个界面上的所有的window其实都是同时构造和析构的 。
我们在使用的时候难免会去扩展,就不得不考虑这个问题了。但其实维护一个Connection也不是什么困难的事情。
class EventSubscriber{public: EventSubscriber(void){} ~EventSubscriber(void) { //这里是去disconnect()这些消息。 Event::clearSlotContainer(container); } //订阅消息 void SubscriberEvent(size_t event_id,EventSet* set,SlotFunction slot) { if (set) { container.push_back(set->BindEvent(event_id,slot)); } }private: Event::SlotContainer container;};
只要所有的订阅者继承这个类即可。
如果需要一个严格意义上的订阅者,我们似乎又没有为订阅者添加一个unSubscriberEvent的方法。CEGUI在这个问题上应该是直接忽略了,因为目前的Connection并不能直接拿到指定发布者的对象的引用,而只知道订阅了哪些消息而已。
像上面“订阅者1”一样,他居然不知道“事件A”(Connection)是谁的。。。。
我目前把CEGUI的消息发布这一块的代码剥离出来了。
http://git.oschina.net/ChildCoding/EventDriver git地址
阅读全文
0 0
- CEGUI订阅者模式
- 发布者订阅者模式
- 订阅者模式
- [转] 委托 订阅者模式
- java中订阅者模式
- 订阅者模式(观察者模式)
- 二、观察者模式/订阅者模式
- js 订阅者模式(观察者模式)
- 观察者模式与发布订阅者模式
- C#、最简单、事件委托、订阅事件、订阅者模式
- 发布订阅者模式c++实现
- boost智能指针重塑订阅者模式
- 一张图理解订阅者模式
- 发布者订阅者模式(一)
- ActiveMQ 2 订阅者模式实现
- 简单的订阅者/发布者模式
- activeMQ发布订阅者模式使用
- javascript 观察者模式 (订阅者与发布者)
- cavarel install under centos 6 with python 3 env
- 【译文】学习深度学习的四个步骤
- windows spacemacs实现org-mode转latex,然后生成pdf
- 安卓控件3
- ProC实例-Linux下的Oracle Pro*C应用程序实例
- CEGUI订阅者模式
- [洛谷P3769][CH弱省胡策R2]TATT-K-D树
- oracle自动备份数据库
- C++ stl队列Queue用法介绍:删除,插入等操作代码举例
- 用PHPStorm 开发laravel
- 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现
- C++之istringstream、ostringstream、stringstream 类详解
- XML和JSON 已经常用的解析工具
- mstar面试题 文件目录中有升级包SOFT001.bin,SOFT002.bin,002比001的版本要新,如何写程序识别出最新的升级包。