監聽者模式

2021-08-27 13:21:44 字數 1542 閱讀 6758

設計乙個事件類,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 該訊息結構包裝了發生的事件的描述資訊,比如訊息值,螢幕座標等,然後將它...