青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
蝸牛的家
男兒當自強
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
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
午夜精品国产更新
|
国产精品视频一区二区高潮
|
伊人男人综合视频网
|
亚洲国产激情
|
欧美激情一二三区
|
久久久久.com
|
亚洲大胆在线
|
国产欧美日韩综合一区在线观看
|
亚洲第一级黄色片
|
在线观看视频一区
|
99精品视频免费观看视频
|
国产自产在线视频一区
|
亚洲色图在线视频
|
国产日韩欧美中文在线播放
|
欧美黑人国产人伦爽爽爽
|
欧美日本高清
|
亚洲丰满在线
|
狠狠操狠狠色综合网
|
午夜精品国产精品大乳美女
|
亚洲天天影视
|
国产精品国内视频
|
欧美一区二区黄
|
亚洲摸下面视频
|
欧美成人午夜激情
|
午夜天堂精品久久久久
|
欧美 日韩 国产 一区
|
中国亚洲黄色
|
国产精品久久久久秋霞鲁丝
|
亚洲人永久免费
|
午夜精品久久久久久久
|
韩国一区电影
|
噜噜噜在线观看免费视频日韩
|
亚洲一级黄色片
|
国产精品一区二区三区免费观看
|
麻豆精品91
|
国产精品毛片a∨一区二区三区|国
|
尹人成人综合网
|
久久综合五月
|
欧美成人一区在线
|
欧美福利一区
|
激情综合色丁香一区二区
|
免费视频一区
|
男女精品网站
|
欧美一区二区日韩
|
久久免费午夜影院
|
亚洲精品少妇
|
欧美一级成年大片在线观看
|
欧美一区二区在线
|
欧美成人三级在线
|
黑人巨大精品欧美一区二区小视频
|
午夜视频在线观看一区二区三区
|
久久天天躁夜夜躁狠狠躁2022
|
欧美成人一区二区三区
|
欧美大片免费
|
欧美精品在线一区二区
|
亚洲国产精品激情在线观看
|
国产午夜精品美女毛片视频
|
午夜精品久久久久久久99热浪潮
|
亚洲一区二区三区四区五区黄
|
亚洲欧美日韩成人
|
亚洲精品免费在线
|
国产一区清纯
|
久久久久久久成人
|
欧美一区久久
|
亚洲区在线播放
|
午夜免费在线观看精品视频
|
亚洲国产黄色
|
国产伦精品一区二区
|
中国女人久久久
|
国产亚洲第一区
|
欧美高清视频在线观看
|
国内精品久久久久影院优
|
一区二区三区色
|
亚洲一区二区三区高清不卡
|
久久er精品视频
|
欧美中文字幕
|
国产乱码精品1区2区3区
|
亚洲欧美偷拍卡通变态
|
久久精品av麻豆的观看方式
|
亚洲精品中文字幕有码专区
|
欧美精品三级在线观看
|
夜夜精品视频
|
国产免费成人
|
欧美99在线视频观看
|
午夜精品在线看
|
亚洲在线免费
|
午夜精品亚洲一区二区三区嫩草
|
亚洲最新合集
|
在线亚洲欧美
|
亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ
|
在线视频欧美精品
|
亚洲图片在线
|
亚洲女性裸体视频
|
欧美一区成人
|
麻豆精品视频在线观看
|
在线视频欧美精品
|
欧美激情一区二区三区在线视频
|
99亚洲伊人久久精品影院红桃
|
免费国产一区二区
|
亚洲福利久久
|
亚洲一区二区三区成人在线视频精品
|
欧美人交a欧美精品
|
亚洲国产精品一区二区www在线
|
日韩视频在线一区二区
|
国产精品v欧美精品v日本精品动漫
|
一区二区三区欧美亚洲
|
国产精品va在线
|
国产欧美精品
|
1024国产精品
|
欧美日韩午夜
|
亚洲砖区区免费
|
在线亚洲高清视频
|
男人的天堂成人在线
|
一区二区三区你懂的
|
国产专区综合网
|
免费高清在线视频一区·
|
亚洲一区二区三区777
|
亚洲国产小视频
|
老司机亚洲精品
|
免费观看久久久4p
|
99精品国产高清一区二区
|
亚洲国产精品一区二区尤物区
|
国产精品私人影院
|
一区在线免费观看
|
一本色道精品久久一区二区三区
|
香蕉尹人综合在线观看
|
亚洲电影免费观看高清
|
99精品视频免费全部在线
|
性欧美xxxx大乳国产app
|
亚洲黄色小视频
|
久久深夜福利免费观看
|
国产日韩1区
|
亚洲免费视频成人
|
日韩午夜在线电影
|
欧美精品一二三
|
亚洲风情亚aⅴ在线发布
|
久久久久.com
|
欧美一区二区私人影院日本
|
亚洲人线精品午夜
|
久久精品首页
|
极品少妇一区二区三区
|
久久久久国产精品午夜一区
|
一本久久综合亚洲鲁鲁
|
亚洲一区二区三区精品视频
|
欧美日韩免费看
|
亚洲在线观看免费视频
|
一区二区久久
|
国产精品一国产精品k频道56
|
亚洲永久精品国产
|
一区二区三区日韩在线观看
|
国产精品久久久久久久久免费樱桃
|
国产精品99久久99久久久二8
|
久久久亚洲高清
|
亚洲国产mv
|
亚洲美女av电影
|
国产午夜精品在线观看
|
免费成人激情视频
|
欧美国产一区视频在线观看
|
亚洲一二三四区
|
久久国产福利
|
99亚洲视频
|
久久都是精品
|
中文精品视频
|
欧美综合77777色婷婷
|
亚洲精品欧洲
|
性欧美长视频
|
夜夜嗨av色一区二区不卡
|
亚洲一区二区三区在线观看视频
|
国产精品视频999
|
美女精品在线
|
国产精品www色诱视频
|
老司机免费视频一区二区三区
|
亚洲第一成人在线
|
一本久久综合亚洲鲁鲁五月天
|
国产亚洲成精品久久
|
亚洲激情av
|
狠狠爱成人网
|
亚洲免费婷婷
|
亚洲影音一区
|
欧美日韩成人在线播放
|
亚洲片在线资源
|
亚洲美女在线看
|
性欧美超级视频
|
老司机久久99久久精品播放免费
|
亚洲四色影视在线观看
|
欧美精品一卡
|
亚洲国产欧洲综合997久久
|
国产午夜亚洲精品理论片色戒
|
99xxxx成人网
|
一区二区三区日韩欧美精品
|
美女国内精品自产拍在线播放
|
久久精品九九
|
国产日韩欧美不卡
|
亚洲免费一级电影
|
午夜一区二区三区不卡视频
|
欧美日韩性生活视频
|
亚洲精品在线二区
|
99精品国产在热久久婷婷
|
欧美黄色影院
|
日韩网站在线观看
|