大胖的部落格
Just a note
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
<
2009年5月
>
日
一
二
三
四
五
六
26
27
28
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
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
Algorithm(13)
(rss)
C#(13)
(rss)
C++(22)
(rss)
Design Pattern(23)
(rss)
Others(14)
(rss)
STL(9)
(rss)
Technical(2)
(rss)
UML(2)
(rss)
Win32(18)
(rss)
Reference
Windows XP command line
最新评论
1. re: 在TCL命令行中调用C函数
@Kenny
实在不好意思,时间太过久远,本人已好久没有接触TCL……
--大胖
2. re: 在TCL命令行中调用C函数
請問如何溝通array 變數
Q:1
tcl array in C
Q:2
C array in tcl
懇求指導
--Kenny
3. re: 在TCL命令行中调用C函数
谢谢!
--1232
Observer
当一个subject的状态变化时,多个observer的状态需要跟着变化。
subject内部存放多个observer的指针,observer提供一个更新自身状态的接口供subject调用。
当subject状态变化时,调用observer的更新接口。
#include
<
iostream
>
#include
<
list
>
#include
<
algorithm
>
using
namespace
std;
class
Observer;
//
被观察的目标
class
Subject
{
public
:
Subject(
int
i):state(i)
{}
//
添加观察者
void
Attach(Observer
*
p)
{
olist.push_back(p);
}
//
去掉观察者
void
Detach(Observer
*
p)
{
list
<
Observer
*>
::iterator iter;
iter
=
find(olist.begin(),olist.end(),p);
if
(olist.end()
!=
iter)
{
olist.erase(iter);
}
}
void
Notify();
void
SetState(
int
i)
{
state
=
i;
}
int
GetState()
const
{
return
state;
}
private
:
list
<
Observer
*>
olist;
int
state;
}
;
//
观察者
class
Observer
{
public
:
Observer(
int
i):state(i)
{}
//
更新状态
void
Update(Subject
*
p)
{
state
=
p
->
GetState();
cout
<<
state
<<
endl;
}
private
:
int
state;
}
;
class
ObserverA:
public
Observer
{
public
:
ObserverA(
int
i
=
0
):Observer(i)
{}
}
;
class
ObserverB:
public
Observer
{
public
:
ObserverB(
int
i
=
0
):Observer(i)
{}
}
;
//
依次更新观察者的状态
void
Subject::Notify()
{
list
<
Observer
*>
::iterator iter;
for
(iter
=
olist.begin();iter
!=
olist.end();
++
iter)
{
(
*
iter)
->
Update(
this
);
}
}
int
main()
{
Observer
*
pa
=
new
ObserverA;
Observer
*
pb
=
new
ObserverB;
Subject s(
4
);
s.Attach(pa);
s.Attach(pb);
s.Notify();
s.SetState(
7
);
s.Notify();
s.Detach(pb);
s.Notify();
delete pb;
delete pa;
return
0
;
}
posted on 2009-06-10 15:12
大胖
阅读(131)
评论(0)
编辑
收藏
引用
所属分类:
Design Pattern
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
常用设计模式
State
Visitor
Template Method
Observer
Memento
Mediator
Iterator
Command
Chain of Responsibility
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 大胖