青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
蝸牛的家
男兒當自強
C++博客
首頁
新文章
新隨筆
聚合
管理
posts - 48, comments - 21, trackbacks - 0
C++設計模式-Observer
意圖:
定義對象間的一種一對多的依賴關系,當一個對象的狀態發生變化時,所有依賴于它的對象都得到通知并被自動更新
UML圖:
適用
當一個抽象模型有兩個方面,其中一個方面依賴于另一方面。將這兩者封裝在獨立的對象中以使他們可以各自獨立地改變和復用
當對一個對象的改變需要同時改變其他對象,而不知道具體有多少對象待改變
當一個對象必須通知其他對象,而他又不能假定其他對象是誰。換言之,你不希望這些對象是緊密耦合的
//
test.h
#include
<
list
>
typedef
int
STATE;
using
namespace
std;
/**/
////////////////////////////////////////////////////////////////////////
//
class
Observer;
class
Subject
{
public
:
Subject() : m_nSubjectState(
-
1
)
{}
virtual
~
Subject();
void
Notify();
//
通知對象改變狀態
void
Attach(Observer
*
pObserver);
//
新增對象
void
Detach(Observer
*
pObserver);
//
刪除對象
virtual
void
Setstate(STATE nState);
virtual
STATE Getstate();
protected
:
STATE m_nSubjectState;
list
<
Observer
*>
m_listObserver;
}
;
//
被更新的類
class
Observer
{
public
:
Observer() : m_nObserverState(
-
1
)
{}
virtual
~
Observer()
{}
virtual
void
Update(Subject
*
pSubject)
=
0
;
//
更新狀態
protected
:
STATE m_nObserverState;
}
;
class
ConCreateSubject :
public
Subject
{
public
:
ConCreateSubject() : Subject()
{}
virtual
~
ConCreateSubject()
{}
virtual
void
SetState(STATE nState);
virtual
STATE GetState();
}
;
class
ConCreateObserver :
public
Observer
{
public
:
ConCreateObserver() : Observer()
{}
virtual
~
ConCreateObserver()
{}
virtual
void
Update(Subject
*
pSubject);
}
;
//
test.cpp : Defines the entry point for the console application.
//
#include
"
stdafx.h
"
#include
<
iostream
>
#include
<
algorithm
>
#include
"
test.h
"
using
namespace
std;
/**/
////////////////////////////////////////////////////////////////////////
//
void
Subject::Attach(Observer
*
pObserver)
{
cout
<<
"
Attach an Observer\n
"
;
m_listObserver.push_back(pObserver);
}
void
Subject::Detach(Observer
*
pObserver)
{
list
<
Observer
*>
::iterator iter;
iter
=
find(m_listObserver.begin(),m_listObserver.end(),pObserver);
if
(m_listObserver.end()
!=
iter)
{
m_listObserver.erase(iter);
}
cout
<<
"
Detach an ObServer\n
"
;
}
void
Subject::Notify()
{
cout
<<
"
Notify Observer's state\n
"
;
list
<
Observer
*>
::iterator iter1,iter2;
for
(iter1
=
m_listObserver.begin(),iter2
=
m_listObserver.end(); iter1
!=
iter2;
++
iter1)
{
(
*
iter1)
->
Update(
this
);
//
更新鏈表中所有對象的狀態
}
}
void
Subject::Setstate(STATE nState)
{
cout
<<
"
SetState by Subject \n
"
;
m_nSubjectState
=
nState;
}
STATE Subject::Getstate()
{
cout
<<
"
Getstate by Subject\n
"
;
return
m_nSubjectState;
}
Subject::
~
Subject()
{
list
<
Observer
*>
::iterator iter1,iter2,temp;
for
(iter1
=
m_listObserver.begin(),iter2
=
m_listObserver.end(); iter1
!=
iter2;)
{
temp
=
iter1;
++
iter1;
delete (
*
temp);
}
m_listObserver.clear();
}
void
ConCreateSubject::SetState(STATE nState)
{
cout
<<
"
Setstate by ConCreateSubject\n
"
;
m_nSubjectState
=
nState;
}
STATE ConCreateSubject::GetState()
{
cout
<<
"
Getstate by ConCreateSubject\n
"
;
return
m_nSubjectState;
}
void
ConCreateObserver::Update(Subject
*
pSubject)
{
if
(NULL
==
pSubject)
{
return
;
}
m_nObserverState
=
pSubject
->
Getstate();
cout
<<
"
The ObserverState is
"
<<
m_nObserverState
<<
endl;
}
/**/
////////////////////////////////////////////////////////////////////////
//
int
main(
int
argc,
char
*
argv[])
{
Observer
*
p1
=
new
ConCreateObserver;
Observer
*
p2
=
new
ConCreateObserver;
Subject
*
p
=
new
ConCreateSubject;
p
->
Attach(p1);
p
->
Attach(p2);
p
->
Setstate(
4
);
p
->
Notify();
p
->
Detach(p1);
p
->
Setstate(
10
);
p
->
Notify();
delete p;
system(
"
pause
"
);
return
0
;
}
posted on 2008-08-21 23:38
黑色天使
閱讀(842)
評論(1)
編輯
收藏
引用
所屬分類:
設計模式
FeedBack:
#
re: C++設計模式-Observer
2012-05-09 15:58 |
no7dw
ConCreateSubject::SetState(STATE nState);
STATE Subject::Setstate()
has a little typing error ,('S' should not a CAPical letter ) this error leads to ConCreateSubject::SetState NOT a virtual effect
回復
更多評論
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
相關文章:
decorator模式
MVC模式理解——當年給我一個browser多好(轉)
C++設計模式-趣解
C++設計模式-visitor
C++設計模式-Memento
C++模式-Iterator
C++設計模式-Observer
C++設計模式-Command
C++模式-FlyWeight
C++設計模式-ChainOfResponsibility
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
<
2025年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
C\C++(8)
Hacker(1)
STL
VC&MFC(4)
操作系統(1)
多進程&多線程
流媒體開發
內存管理技術(2)
軟件工程(1)
設計模式(20)
數據結構&算法(2)
網絡開發(3)
隨筆檔案
2011年4月 (1)
2011年3月 (2)
2009年7月 (1)
2009年6月 (2)
2009年3月 (1)
2009年2月 (3)
2009年1月 (3)
2008年12月 (5)
2008年11月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (23)
文章檔案
2011年3月 (1)
2009年6月 (1)
2008年11月 (1)
搜索
最新評論
1.?re: C++設計模式-Observer
評論內容較長,點擊標題查看
--no7dw
2.?re: YUV格式詳細解釋與FFMPEG的關系
評論內容較長,點擊標題查看
--windsome
3.?re: 鍵盤過濾驅動源代碼
@soul
再怎么懶也應該自己實現一部分吧
--黑色天使
4.?re: 鍵盤過濾驅動源代碼[未登錄]
再怎么懶也該加上unload例程吧
--soul
5.?re: CHttpDownLoad Beta 1.0
評論內容較長,點擊標題查看
--tangxinfa
閱讀排行榜
1.?RGB、YUY2、YUYV、YVYU、UYVY與AYUV(轉)(6740)
2.?YUV格式詳細解釋與FFMPEG的關系(4346)
3.?如何檢測內存泄漏(轉)(3921)
4.?memcpy的BUG(2749)
5.?內存池技術學習筆記(2383)
評論排行榜
1.?CHttpDownLoad Beta 1.0(10)
2.?memcpy的BUG(5)
3.?事件模型SOCKET封裝(2)
4.?鍵盤過濾驅動源代碼(2)
5.?C++設計模式-Observer(1)
Copyright ©2025 黑色天使 Powered By
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
怡红院av一区二区三区
|
亚洲精品社区
|
欧美亚洲尤物久久
|
黄色成人免费观看
|
亚洲经典三级
|
国产精品jvid在线观看蜜臀
|
欧美在线观看一区二区三区
|
久久久噜噜噜久久
|
99精品欧美一区二区蜜桃免费
|
在线视频免费在线观看一区二区
|
国产一区二区三区在线观看免费
|
亚洲国产视频a
|
国产精品日韩欧美一区
|
蜜桃精品久久久久久久免费影院
|
欧美日韩亚洲另类
|
久久久噜噜噜久噜久久
|
欧美日韩国产精品专区
|
老司机一区二区三区
|
欧美午夜精品久久久久久久
|
美日韩在线观看
|
国产欧美日韩激情
|
日韩西西人体444www
|
在线欧美不卡
|
欧美一区在线直播
|
亚洲欧美国产精品桃花
|
欧美激情亚洲一区
|
久久性色av
|
国产精品自拍三区
|
在线视频中文亚洲
|
亚洲精品社区
|
老妇喷水一区二区三区
|
欧美中文字幕在线视频
|
国产精品福利网
|
亚洲精品女人
|
一区精品在线
|
久久激情网站
|
久久都是精品
|
国产日韩一区二区三区
|
一区二区三区四区蜜桃
|
99精品免费视频
|
久久久久国产精品麻豆ai换脸
|
欧美天天在线
|
亚洲人永久免费
|
亚洲黄色影片
|
久久久久高清
|
久热精品视频
|
在线成人www免费观看视频
|
欧美中文字幕视频
|
久久福利影视
|
国产综合网站
|
久久久精品性
|
久久综合给合
|
亚洲高清二区
|
欧美大胆人体视频
|
亚洲国产综合在线
|
日韩午夜在线
|
欧美日韩国产大片
|
日韩一级精品
|
亚洲综合视频1区
|
国产精品久久久久毛片软件
|
亚洲午夜黄色
|
久久精品五月
|
亚洲国产高清在线观看视频
|
男女激情久久
|
亚洲国产精品99久久久久久久久
|
亚洲欧洲一级
|
欧美日韩国产bt
|
亚洲一区区二区
|
久久精品中文字幕一区二区三区
|
国产一区91精品张津瑜
|
久久久久久久综合狠狠综合
|
亚洲高清影视
|
亚洲在线播放
|
狠狠久久婷婷
|
欧美精品首页
|
午夜欧美电影在线观看
|
欧美 日韩 国产 一区
|
亚洲精品社区
|
国产精品一区视频网站
|
久久精品夜色噜噜亚洲a∨
|
亚洲第一伊人
|
香蕉久久精品日日躁夜夜躁
|
国产亚洲精品高潮
|
久热爱精品视频线路一
|
亚洲日本成人网
|
欧美呦呦网站
|
亚洲日本一区二区
|
国产精品入口日韩视频大尺度
|
久久久7777
|
亚洲美女诱惑
|
久久久久国产一区二区
|
日韩亚洲欧美综合
|
国产精品视频最多的网站
|
久久久久久久久久久久久9999
|
亚洲国产影院
|
久久精品夜色噜噜亚洲aⅴ
|
亚洲精品乱码
|
国产麻豆9l精品三级站
|
麻豆freexxxx性91精品
|
亚洲视频axxx
|
亚洲国产精品久久久久婷婷老年
|
亚洲一区二区三区免费观看
|
一区二区三区中文在线观看
|
欧美日韩直播
|
米奇777在线欧美播放
|
亚洲综合电影
|
亚洲三级视频在线观看
|
久久精品一区四区
|
亚洲欧美国产高清
|
亚洲免费福利视频
|
国产综合色产在线精品
|
欧美日韩在线一区
|
欧美高清视频
|
最新国产精品拍自在线播放
|
午夜视频一区在线观看
|
日韩视频在线永久播放
|
狠狠干狠狠久久
|
国产精品青草久久
|
欧美视频日韩视频在线观看
|
久久另类ts人妖一区二区
|
亚洲欧美日韩中文在线制服
|
亚洲免费观看在线观看
|
亚洲第一综合天堂另类专
|
久久久噜噜噜久久人人看
|
午夜亚洲精品
|
亚洲尤物在线视频观看
|
一本大道久久a久久精二百
|
亚洲第一主播视频
|
国产亚洲欧美中文
|
国产精品女人网站
|
欧美午夜久久
|
国产精品福利网站
|
欧美日韩免费一区二区三区
|
免费一区二区三区
|
欧美.www
|
欧美激情a∨在线视频播放
|
麻豆久久久9性大片
|
美女精品一区
|
欧美91福利在线观看
|
免费观看国产成人
|
欧美成人午夜免费视在线看片
|
久久综合伊人77777麻豆
|
老鸭窝毛片一区二区三区
|
久久欧美肥婆一二区
|
久久色中文字幕
|
免费欧美电影
|
欧美日本三区
|
国产精品久久久久久影视
|
国产精品欧美一区二区三区奶水
|
国产精品乱码人人做人人爱
|
国产精品久久久久久五月尺
|
国产精品午夜av在线
|
国产性天天综合网
|
激情五月***国产精品
|
亚洲国产欧美一区
|
亚洲精品自在在线观看
|
一区二区欧美视频
|
亚洲一区二区影院
|
欧美在线看片
|
欧美高清在线
|
亚洲精品国产精品国产自
|
一区二区91
|
亚洲综合社区
|
久久一区二区视频
|
欧美另类变人与禽xxxxx
|
国产精品mm
|
国语自产精品视频在线看一大j8
|
欧美高清视频一区二区
|
亚洲国产成人精品视频
|
日韩一级不卡
|
欧美一级视频
|
免费短视频成人日韩
|
欧美日韩系列
|
国产免费亚洲高清
|
亚洲国产欧美一区二区三区同亚洲
|
日韩视频免费在线
|
先锋影音久久
|
女同性一区二区三区人了人一
|
亚洲美女中出
|
欧美一区二区三区在线观看视频
|
美国成人直播
|
国产精品视频精品
|
亚洲国产婷婷综合在线精品
|
久久综合色播五月
|
欧美色网一区二区
|
国语自产精品视频在线看8查询8
|
亚洲美女电影在线
|
欧美在线一二三
|
亚洲国产裸拍裸体视频在线观看乱了
|
欧美一区二区在线播放
|
欧美成人第一页
|
亚洲亚洲精品在线观看
|
久久琪琪电影院
|
国产精品久久久久三级
|
一区二区三区在线不卡
|
一区二区三区欧美视频
|
老司机一区二区三区
|
一区二区三区视频在线观看
|
毛片一区二区
|
国产一区二区三区黄
|