青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
蝸牛的家
男兒當自強
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
管理
<
2012年5月
>
日
一
二
三
四
五
六
29
30
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
31
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我參與的隨筆
留言簿
(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(2747)
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
|
亚洲国产99
|
亚洲女人小视频在线观看
|
亚洲精品社区
|
欧美成人国产一区二区
|
久久在线免费视频
|
美女脱光内衣内裤视频久久网站
|
亚洲午夜免费视频
|
一本色道久久综合亚洲精品不
|
狠狠色丁香久久婷婷综合丁香
|
欧美午夜片欧美片在线观看
|
欧美亚韩一区
|
国内揄拍国内精品久久
|
国产精品久久9
|
国产精品一区2区
|
激情亚洲一区二区三区四区
|
国内精品久久久久久久影视麻豆
|
国产伦精品一区二区三
|
精品动漫一区
|
亚洲香蕉伊综合在人在线视看
|
欧美中文在线观看国产
|
暖暖成人免费视频
|
日韩视频在线你懂得
|
99精品视频免费观看
|
欧美一区中文字幕
|
欧美高清视频一区二区三区在线观看
|
欧美另类变人与禽xxxxx
|
国产精品家教
|
亚洲精品亚洲人成人网
|
欧美与欧洲交xxxx免费观看
|
欧美电影美腿模特1979在线看
|
亚洲国产日韩欧美
|
亚洲一区二区三区精品在线
|
国产精品自拍在线
|
亚洲激情影视
|
久久婷婷人人澡人人喊人人爽
|
欧美丰满少妇xxxbbb
|
一本色道久久综合狠狠躁篇的优点
|
国产精品国产三级国产aⅴ无密码
|
欧美一区二区三区免费观看视频
|
亚洲欧美精品伊人久久
|
亚洲片在线资源
|
夜夜爽www精品
|
欧美日韩一区二区三区高清
|
影音先锋国产精品
|
麻豆国产精品va在线观看不卡
|
欧美一区二区在线
|
黄色日韩精品
|
欧美成人精精品一区二区频
|
性8sex亚洲区入口
|
国产欧美在线观看一区
|
亚洲在线成人精品
|
一二美女精品欧洲
|
欧美日韩综合在线
|
日韩亚洲欧美成人
|
亚洲国产99
|
欧美激情视频一区二区三区免费
|
亚洲福利免费
|
亚洲国产你懂的
|
欧美色中文字幕
|
亚洲欧美综合网
|
亚洲天堂av电影
|
国产精品久久久久久久电影
|
久久久夜夜夜
|
亚洲视频免费在线
|
久久最新视频
|
欧美精品一区在线发布
|
亚洲欧美另类在线
|
欧美在线视频观看
|
一区在线视频
|
亚洲一区二区动漫
|
最新日韩欧美
|
亚洲自拍另类
|
亚洲精品国精品久久99热
|
99热精品在线
|
亚洲精品中文字幕在线
|
一本久久a久久精品亚洲
|
欧美手机在线视频
|
牛夜精品久久久久久久99黑人
|
久久久视频精品
|
一区二区三区产品免费精品久久75
|
激情欧美日韩一区
|
日韩亚洲视频
|
伊人一区二区三区久久精品
|
在线视频你懂得一区二区三区
|
亚洲电影免费观看高清完整版在线观看
|
欧美性开放视频
|
麻豆精品在线播放
|
国产精品久久久久久久久久久久
|
美日韩精品视频
|
狠狠色狠狠色综合日日五
|
在线视频一区观看
|
欧美国产亚洲精品久久久8v
|
亚洲国产一区二区精品专区
|
欧美在线你懂的
|
先锋影音一区二区三区
|
欧美性色aⅴ视频一区日韩精品
|
亚洲高清视频在线观看
|
国产精品久久久久久久一区探花
|
亚洲国产三级网
|
亚洲欧美日韩国产成人
|
国产伦精品一区二区三区
|
欧美中文字幕视频在线观看
|
久久不射网站
|
国产区日韩欧美
|
久久亚洲国产成人
|
欧美激情一区在线观看
|
夜夜嗨av一区二区三区免费区
|
亚洲欧美三级在线
|
亚洲国产欧洲综合997久久
|
亚洲欧美国产精品桃花
|
精品1区2区3区4区
|
欧美日韩在线看
|
裸体一区二区
|
午夜亚洲视频
|
亚洲精品在线观看免费
|
麻豆精品视频
|
欧美一区二区日韩
|
国内精品视频在线观看
|
欧美另类videos死尸
|
久色成人在线
|
亚洲国产综合视频在线观看
|
久久久999精品免费
|
亚洲欧美一区二区三区久久
|
日韩视频一区二区
|
亚洲国产经典视频
|
激情欧美一区二区三区
|
国产精品日韩
|
亚洲精品一区中文
|
欧美中日韩免费视频
|
亚洲手机成人高清视频
|
国产主播精品在线
|
六月丁香综合
|
玖玖玖国产精品
|
欧美激情精品久久久久久大尺度
|
亚洲二区在线观看
|
久久精品盗摄
|
久久一综合视频
|
亚洲国产精品一区二区www在线
|
蜜桃av一区二区
|
亚洲盗摄视频
|
亚洲午夜精品久久久久久app
|
在线综合欧美
|
久久在线观看视频
|
麻豆av一区二区三区
|
欧美日韩综合网
|
国产一区二区三区免费观看
|
国内成+人亚洲+欧美+综合在线
|
在线欧美视频
|
亚洲一区免费网站
|
久久综合九色99
|
中文亚洲视频在线
|
亚洲一区二区在
|
欧美国产一区二区在线观看
|
国产精品亚洲视频
|
一区二区三区www
|
蜜臀99久久精品久久久久久软件
|
欧美激情成人在线视频
|
亚洲视频一区二区
|
另类专区欧美制服同性
|
国产午夜精品在线
|
欧美一级久久久
|
在线视频精品一区
|
欧美激情a∨在线视频播放
|
国产性猛交xxxx免费看久久
|
亚洲免费在线精品一区
|
亚洲激情社区
|
欧美日韩一区国产
|
一区二区三区四区五区精品
|
久久成人亚洲
|
久久精品日产第一区二区
|
国产日产精品一区二区三区四区的观看方式
|
久久精品综合一区
|
国产日韩欧美成人
|
久久精品伊人
|
亚洲三级影院
|
欧美午夜精品久久久
|
亚洲欧美激情在线视频
|
亚洲欧美精品在线
|
在线观看成人一级片
|
亚洲激情第一区
|
国产欧美成人
|
欧美大片一区
|
伊人久久大香线蕉av超碰演员
|
亚洲第一精品久久忘忧草社区
|
欧美高清视频免费观看
|
欧美成人资源
|
亚洲欧美视频在线观看视频
|
亚洲综合不卡
|
亚洲人成网站777色婷婷
|
在线视频中文亚洲
|
亚洲美女精品成人在线视频
|
国产区亚洲区欧美区
|
宅男噜噜噜66国产日韩在线观看
|