監聽者對大家來說可能並不陌生,所謂監聽者就是用來監聽自已感興趣的事件的,當收到自已感興趣的事件時會做出相應的反映。
它的應用是非常廣的,比如win32的訊息機制,它跟監聽者模式就異曲同工,作業系統將產生的各種事件包裝成訊息(msg),該訊息結構包裝了發生的事件的描述資訊,比如訊息值,螢幕座標等,然後將它投遞到相應的程序中,當該程序收到該訊息時會檢視該msg結構中的資訊,也就知道了發生了什麼事件,並對自已感興趣的事件進行響應。
下面我們就來用c++實現乙個簡單的監聽者
[cpp]view plain
copy
#include
using
namespace std;
//listener基類(抽象類)
class abstractlistener
;
virtual ~abstractlistener(){};
virtual
void actionperformed(int state) = 0;
};
//listener實現類(它類似於作業系統中的程序)
class statelistener:public abstractlistener
;
virtual ~statelistener(){};
virtual
void actionperformed(int state);
};
void statelistener::actionperformed(int state)
else
if(state==2)else
}
//listener center(類似於作業系統(os))
class listenercenter
;
int getcount();
void addlistener(statelistener);
void firestatelistener(int state);
};
listenercenter::listenercenter()
int listenercenter::getcount()
void listenercenter::addlistener(statelistener statelistener)
void listenercenter::firestatelistener(int state)
}
int main(int argc, char* argv)
列印: *************************=
event 1 is fired.
event 1 is fired.
*************************=
event 2 is fired.
event 2 is fired.
*************************=
other event is fired.
other event is fired.
*************************=
監聽者模式
設計乙個事件類,gamelistener,用來儲存各種事件 需要監聽事件變化的類,需要自己主動去註冊監聽 巨集定義 methodname,gamelistener中的方法的名稱 ifndef decalre listener define decalre listener methodname pu...
監聽者模式
監聽者模式有三大組成部分 事件源 eventsource 具有註冊 的方法 事件物件 eventobject 事件 listener 有callback eventobject 方法,當收到事件發生後的處理。事件物件 主要目的是包裝事件源,然後將本身 事件物件 交給 public class eve...
監聽者模式
在函式裡傳 函式,可以實現在特定的條件下執行想要的功能,但是缺點是什麼呢?如果你要在特定條件下執行很多的功能,咋辦呢?再次呼叫函式,然後 太囉嗦 這裡說的監聽者模式呢,其實也是一種思想,用大白話比喻呢就是 比如說有乙個人比賽得了冠軍 也可以是亞軍,233 然後嘞,有三個人分別想做三件事,但是,這三件...