青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
蝸牛的家
男兒當自強
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
博客園
模板提供:
滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
亚洲免费播放
|
欧美成人四级电影
|
亚洲精选91
|
国产欧美高清
|
欧美激情1区
|
亚洲专区一区
|
欧美另类高清视频在线
|
国产精品日本一区二区
|
欧美极品在线视频
|
国产精品国产精品国产专区不蜜
|
久久久蜜桃精品
|
日韩一级免费观看
|
99精品热6080yy久久
|
久久综合婷婷
|
欧美风情在线
|
国产精品盗摄久久久
|
国产视频精品免费播放
|
亚洲国产人成综合网站
|
亚洲一区免费在线观看
|
久久久久国内
|
亚洲人成网站在线观看播放
|
亚洲激情第一区
|
午夜宅男久久久
|
欧美成年视频
|
国产精品久久9
|
亚洲国产成人久久综合一区
|
日韩亚洲精品在线
|
久久精品免费电影
|
91久久精品一区
|
欧美亚洲自偷自偷
|
欧美日本一区
|
亚洲成人直播
|
欧美在线一级va免费观看
|
久久亚洲精品伦理
|
av成人福利
|
久久婷婷人人澡人人喊人人爽
|
欧美特黄a级高清免费大片a级
|
一区三区视频
|
久久精品视频播放
|
亚洲性感美女99在线
|
欧美激情亚洲精品
|
在线观看一区
|
亚洲欧美在线看
|
亚洲国产高潮在线观看
|
欧美在线视频在线播放完整版免费观看
|
久久精品动漫
|
欧美视频一区二区三区…
|
在线精品一区
|
欧美伊人久久
|
在线中文字幕一区
|
欧美激情成人在线视频
|
在线播放日韩欧美
|
老色批av在线精品
|
久久精品国产在热久久
|
国产亚洲一区二区三区在线播放
|
一区二区精品
|
亚洲精品永久免费精品
|
免费日韩一区二区
|
亚洲欧洲另类
|
亚洲精品视频免费在线观看
|
免费观看日韩av
|
亚洲丶国产丶欧美一区二区三区
|
亚洲午夜一区
|
亚洲精品免费一二三区
|
欧美精品网站
|
一区二区三区导航
|
99国内精品久久
|
欧美香蕉大胸在线视频观看
|
亚洲一级黄色片
|
一区二区三区国产精华
|
国产精品成人一区二区三区夜夜夜
|
欧美 日韩 国产 一区
|
在线播放豆国产99亚洲
|
欧美1区视频
|
男女精品网站
|
亚洲色图综合久久
|
亚洲亚洲精品三区日韩精品在线视频
|
亚洲精品乱码久久久久久日本蜜臀
|
欧美韩日一区二区
|
免费日韩成人
|
亚洲一区视频在线
|
西西人体一区二区
|
在线观看91精品国产入口
|
欧美大片va欧美在线播放
|
欧美另类视频
|
久久国产精品一区二区三区四区
|
久久欧美中文字幕
|
日韩亚洲欧美一区
|
亚洲一区二区三区高清
|
亚洲一区二区视频在线
|
国产亚洲一级高清
|
亚洲国产欧美日韩另类综合
|
欧美日本韩国在线
|
久久久天天操
|
欧美二区在线
|
欧美一区二区三区成人
|
欧美风情在线观看
|
久久狠狠久久综合桃花
|
欧美精品久久久久久
|
欧美一区二区视频在线观看
|
小黄鸭视频精品导航
|
可以免费看不卡的av网站
|
欧美国产91
|
久久精品99国产精品
|
欧美乱人伦中文字幕在线
|
久久久国产亚洲精品
|
欧美日韩视频在线
|
欧美国产精品中文字幕
|
国产精品天美传媒入口
|
91久久国产精品91久久性色
|
国模私拍一区二区三区
|
国产精品99久久久久久久vr
|
91久久精品一区二区三区
|
销魂美女一区二区三区视频在线
|
亚洲精品在线二区
|
久久美女性网
|
久久精品国产久精国产思思
|
欧美视频在线看
|
亚洲精品乱码久久久久
|
亚洲大片免费看
|
欧美在线视频观看
|
欧美亚洲一区
|
国产精品美女久久
|
99国内精品
|
99国产一区
|
欧美xx视频
|
欧美激情久久久久久
|
在线观看的日韩av
|
久久激情视频久久
|
久久三级福利
|
激情一区二区
|
久久久精品国产一区二区三区
|
在线亚洲一区二区
|
欧美国产激情
|
亚洲国产日韩精品
|
亚洲福利视频一区二区
|
久久久久久午夜
|
免费黄网站欧美
|
亚洲国产高清在线
|
猛男gaygay欧美视频
|
亚洲电影免费观看高清完整版
|
1024国产精品
|
欧美国产日韩在线
|
亚洲精品一区二区三区四区高清
|
日韩视频精品在线观看
|
欧美女同在线视频
|
亚洲网站在线
|
久久视频国产精品免费视频在线
|
狠狠久久亚洲欧美
|
久热精品视频在线
|
亚洲欧洲日本国产
|
亚洲在线一区
|
国产一区观看
|
欧美成人免费观看
|
一本色道88久久加勒比精品
|
性8sex亚洲区入口
|
在线观看91久久久久久
|
欧美日韩岛国
|
性欧美大战久久久久久久免费观看
|
亚洲精品乱码久久久久久蜜桃麻豆
|
亚洲久色影视
|
亚洲高清在线
|
亚洲一区二区三区四区在线观看
|
西西人体一区二区
|
国内外成人免费激情在线视频网站
|
久热综合在线亚洲精品
|
亚洲欧洲偷拍精品
|
性做久久久久久免费观看欧美
|
激情一区二区三区
|
欧美伦理视频网站
|
性欧美长视频
|
亚洲三级性片
|
久久久精彩视频
|
一本一本a久久
|
国产一区视频在线看
|
欧美18av
|
欧美在线视频日韩
|
艳妇臀荡乳欲伦亚洲一区
|
麻豆成人综合网
|
亚洲深夜福利网站
|
好吊色欧美一区二区三区视频
|
欧美精品免费看
|
欧美专区在线
|
中文国产一区
|
亚洲国产专区
|
麻豆成人在线播放
|
欧美一区二区三区婷婷月色
|
亚洲麻豆一区
|
在线观看国产日韩
|
国产精品国产福利国产秒拍
|
欧美www视频
|
久久裸体视频
|
午夜久久99
|
亚洲婷婷综合色高清在线
|
91久久极品少妇xxxxⅹ软件
|
亚洲美女在线观看
|
欧美激情一区二区三区在线
|
91久久国产综合久久
|
日韩视频在线免费
|
亚洲美女av网站
|