設計乙個事件類,gamelistener,用來儲存各種事件
需要監聽事件變化的類,需要自己主動去註冊監聽
巨集定義:
//methodname,gamelistener中的方法的名稱
#ifndef decalre_listener
#define decalre_listener(methodname)\
public:\
void add##methodname##listener(gamelistener *);\
void remove##methodname##listener(gamelistener *);\
void notify##methodname();\
private:\
listlist##methodname;
#endif
#ifndef define_listener
#define define_listener(classname,methodname)\
void classname::add##methodname##listener(gamelistener * listener)\
\void classname::remove##methodname##listener(gamelistener *listener)\
\void classname::notify##methodname()\\}
#endif
使用方法:
在gamelistener中新增事件
#ifndef gamelistener_h
#define gamelistener_h
class gamelistener
; 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();
監聽者模式
監聽者模式有三大組成部分 事件源 eventsource 具有註冊 的方法 事件物件 eventobject 事件 listener 有callback eventobject 方法,當收到事件發生後的處理。事件物件 主要目的是包裝事件源,然後將本身 事件物件 交給 public class eve...
監聽者模式
在函式裡傳 函式,可以實現在特定的條件下執行想要的功能,但是缺點是什麼呢?如果你要在特定條件下執行很多的功能,咋辦呢?再次呼叫函式,然後 太囉嗦 這裡說的監聽者模式呢,其實也是一種思想,用大白話比喻呢就是 比如說有乙個人比賽得了冠軍 也可以是亞軍,233 然後嘞,有三個人分別想做三件事,但是,這三件...
監聽者模式(listener) c 實現
監聽者對大家來說可能並不陌生,所謂監聽者就是用來監聽自已感興趣的事件的,當收到自已感興趣的事件時會做出相應的反映。它的應用是非常廣的,比如win32的訊息機制,它跟監聽者模式就異曲同工,作業系統將產生的各種事件包裝成訊息 msg 該訊息結構包裝了發生的事件的描述資訊,比如訊息值,螢幕座標等,然後將它...