首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

监闻者模式

2013-08-04 
监听者模式//methodname,GameListener中的方法的名称#ifndef DECALRE_LISTENER#defineDECALRE_LISTENER(me

监听者模式
//methodname,GameListener中的方法的名称#ifndef DECALRE_LISTENER#define DECALRE_LISTENER(methodname)\public:\void add##methodname##Listener(GameListener *);\void remove##methodname##Listener(GameListener *);\void notify##methodname();\private:\list<GameListener *> list##methodname;#endif#ifndef DEFINE_LISTENER#define DEFINE_LISTENER(classname,methodname)\void classname::add##methodname##Listener(GameListener * listener)\{\list##methodname.push_back(listener);\}\void classname::remove##methodname##Listener(GameListener *listener)\{\list##methodname.remove(listener);\}\void classname::notify##methodname()\{\for(list<GameListener *>::iterator it=list##methodname.begin();it!=list##methodname.end();++it)\{\(*it)->methodname();\}\}#endif

?使用方法:

?

? ? 在GameListener中添加事件

? ??

#ifndef GAMELISTENER_H#define GAMELISTENER_Hclass GameListener{public:virtual void login(){};virtual void logout(){};virtual ~GameListener(){};//基类的析构函数需要是虚函数,防止子类的析构函数不会被调用};#endif

?在GameController.h中

?

? ??

DECALRE_LISTENER(login);

?在GameController.cpp

DEFINE_LISTENER(GameController,login);

?

在需要监听的类中,继承GameListener.h,比如GameView,在构造函数中

GameController::singleton()->addloginListener((GameListener *)this);

?在析构函数中

GameController::singleton()->removeloginListener((GameListener *)this);

?

在需要处理事件变化的地方notify,这个时候就会执行所有关注login这个事件的类的login方法

GameController::singleton()->notifylogin();

?

?

?

?

热点排行