觀察者模式用於實現以下功能,有乙個觀察者類用以發布資訊,其他類繼承這個觀察者類,只訂閱自己想要操作的資訊。
本例中,gateservice.h,gatesevice.cpp檔案用以實現觀察者類。dlglogin.h,dlglogin.cpp檔案用以實現訂閱資訊的類。
具體實現如下:
檔案
#pragma once
class igateserverrpc
; //觀察模式:獲取訊息
};typedef
std::list
observerlist;
typedef
std::list
::iterator observerlistiter;
class cgateservice
;
檔案
#include "stdafx.h"
#include "gateservice.h"
cgateservice::cgateservice()
cgateservice::~cgateservice()
void cgateservice::addobserver(igateserverrpc * pobserver)
}}void cgateservice::delobserver(igateserverrpc *pobserver)
}}void cgateservice::pulldata()}}
}
檔案
#pragma once
#include "stdafx.h"
#include "gateservice.h"
//登入視窗
class cdlglogin
: public windowimplbasebase
, public igateserverrpc
;
// dlglogin.cpp檔案
#include "stdafx.h"
#include "dlglogin.h"
#include "resource.h"
using namespace std;
cdlglogin::cdlglogin()
: m_pbtnlogin(null)
, m_pedtusername(null)
, m_pedtpwd(null)
, m_strusername(_t(""))
, m_strpassword(_t(""))
, m_pgateservice(null)
cdlglogin::~cdlglogin()
}lpctstr cdlglogin::getwindowclassname() const
cstdstring cdlglogin::getskinfile()
cstdstring cdlglogin::getskinfolder()
void cdlglogin::init()
int cdlglogin::createagreementdlg()
void cdlglogin::ongetmsg(cstring content)
void cdlglogin::notify(tnotifyui& msg)
}}lresult cdlglogin::handlemessage(uint umsg, wparam wparam, lparam lparam)
bool cdlglogin::loginitialcheck(cstring &username, cstring &pwd)
else
if (pwd == _t(""))
return
true;
}
1 觀察者模式總結 C
觀察者模式 定義了一種 一對多 的依賴關係,讓多個觀察者物件同時監聽乙個物件的改變,即當該物件的狀態發現改變時,會通知所有它依賴的觀察者物件。觀察者模式屬於行為模式。意圖 定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。主要解決 通知其他物件有...
C 觀察者模式
觀察者模式 有時被稱作發布 訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。作用 在大的專案中,當乙個物件的狀態發生改變時可以通知其他相關的物件,這就可以用到觀察者模式。用以將多種物件...
觀察者模式C
當物件間存在一對多的關係,當狀態改變時,其他物件都得到通知,這就是觀察者模式了。觀察者模式實現發布 訂閱功能。如我們有個專案叫ngi,需要召開stanup會議,會議上需求變更時需要通過所有參加會議的人員,我們就可以使用觀察者模式,其uml圖如下 其 實現如下 include include incl...