大胖的部落格
Just a note
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
112 随笔 :: 0 文章 :: 3 评论 :: 0 Trackbacks
<
2009年6月
>
日
一
二
三
四
五
六
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
7
8
9
10
11
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
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
Visitor
Element类提供一个Accept方法,接受visitor。
在不改变element类的前提下,定义对element类的新操作。
每个Visitor定义一个针对目标element类的访问方法,该方法接受一个element类型指针,在该方法中对目标element进行操作。
调用element的accept方法,传入visitor,在accept方法中调用visitor的访问方法,传入element自己的指针。
这样,定义了新的visitor后,只需要调用element的accept传入新的visitor,即可对element进行新操作。
#include
<
iostream
>
using
namespace
std;
class
Visitor;
//
原类,提供Accept方法,接受visitor
class
Element
{
public
:
virtual
void
Accept(Visitor
*
p)
=
0
;
}
;
class
ConcreteElement:
public
Element
{
public
:
void
Accept(Visitor
*
p);
//
测试的操作函数
void
Operation(
const
char
*
c)
const
{
cout
<<
c
<<
endl;
}
}
;
//
visitor基类,提供针对某个element类的访问接口,该接口传入目标类类型参数
class
Visitor
{
public
:
virtual
void
VisitConcreteElement(ConcreteElement
*
p)
=
0
;
}
;
class
ConcreteVisitorA:
public
Visitor
{
public
:
//
visitor派生类重写访问接口,对目标类进行操作
void
VisitConcreteElement(ConcreteElement
*
p)
{
p
->
Operation(
"
A
"
);
}
}
;
class
ConcreteVisitorB:
public
Visitor
{
public
:
//
不通的visitor派生类对目标类进行不同的操作
void
VisitConcreteElement(ConcreteElement
*
p)
{
p
->
Operation(
"
B
"
);
}
}
;
void
ConcreteElement::Accept(Visitor
*
p)
{
//
接受visitor时把自己传进去,让visitor操作
p
->
VisitConcreteElement(
this
);
}
int
main()
{
//
创建不同的visitor,目的是对目标类进行不同的操作
Visitor
*
pa
=
new
ConcreteVisitorA;
Visitor
*
pb
=
new
ConcreteVisitorB;
Element
*
pe
=
new
ConcreteElement;
//
传入不同的visitor,不同的visitor实现不同的操作
pe
->
Accept(pa);
pe
->
Accept(pb);
delete pe;
delete pb;
delete pa;
return
0
;
}
posted on 2009-06-10 16:02
大胖
阅读(194)
评论(0)
编辑
收藏
引用
所属分类:
Design Pattern
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
常用设计模式
State
Visitor
Template Method
Observer
Memento
Mediator
Iterator
Command
Chain of Responsibility
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 大胖