侃访问模式(Visitor)
2006-05-12 17:01
239 查看
访问模式允许在不更改现有类层次结构的情况下向其中增加新方法。这里重点是不更改类层次结构,指的是类的框架,但可以很少的修改一些代码。
Visitor模式的核心机制是双重分发的技术。何谓双重分发呢?下面我会慢慢解释这个“双重分发”。
现在中国假冒产品猖獗,我就用这来举个例子,说明访问模式的方法。
让我们来看看UML图:
CProductVisit *pProductVisit = new CJapanFactory();
CProduct *pProduct = new CCamera();
pProduct->Accept(pProductVisit );
好了,Client端的调用就是这么简单,
CProduct中Accept函数的实现如下:
void Accept(CProductVisit* pVisit)
void Visit(CCamera *pCamera)
{
if(pCamera)
{
memcpy(pCamera->ProducingArea,"Camera Made in China, hangzhou");
}
}
现在看出在哪里进行第二次分发了吧。当派生对象是CCamera时,会调用访问者对象中的Visit(CCamera *pCamera)函数,当派生对象是CTV时,会相应去调用Visit(CTV *pTV)函数,从而实现对ProducingArea变量赋成相应的值。Visit函数就是第二次分发,它辨别出要执行的特定函数。
说了这么多,那访问模式适合在哪些场合使用呢?
比如不同的操作系统,对程序的配置不同,这时就能用上。总的来说,就是在不同环境有不同的设置的情况下,访问模式能有很好的用武之地。
本人是边学边写,有错误的地方还望指正。
Visitor模式的核心机制是双重分发的技术。何谓双重分发呢?下面我会慢慢解释这个“双重分发”。
现在中国假冒产品猖獗,我就用这来举个例子,说明访问模式的方法。
让我们来看看UML图:
CProductVisit *pProductVisit = new CJapanFactory();
CProduct *pProduct = new CCamera();
pProduct->Accept(pProductVisit );
好了,Client端的调用就是这么简单,
CProduct中Accept函数的实现如下:
void Accept(CProductVisit* pVisit)
void Visit(CCamera *pCamera)
{
if(pCamera)
{
memcpy(pCamera->ProducingArea,"Camera Made in China, hangzhou");
}
}
现在看出在哪里进行第二次分发了吧。当派生对象是CCamera时,会调用访问者对象中的Visit(CCamera *pCamera)函数,当派生对象是CTV时,会相应去调用Visit(CTV *pTV)函数,从而实现对ProducingArea变量赋成相应的值。Visit函数就是第二次分发,它辨别出要执行的特定函数。
说了这么多,那访问模式适合在哪些场合使用呢?
比如不同的操作系统,对程序的配置不同,这时就能用上。总的来说,就是在不同环境有不同的设置的情况下,访问模式能有很好的用武之地。
本人是边学边写,有错误的地方还望指正。
相关文章推荐
- 访问差异类型的集合类--visitor模式入门
- 设计模式 Design Parttern ——访问模式Visitor
- The Visitor Pattern(访问模式)
- 侃访问模式(Visitor)
- 访问者(Visitor)模式--------访问数据结构并处理数据
- 设计模式(十三)-访问者模式(Visitor Pattern)——访问数据结构并处理数据
- 访问者(Visitor)模式
- 学习php设计模式 php实现访问者模式(Visitor)
- 设计模式学习笔记二十四——Visitor模式
- 设计模式之——访问模式(讨论篇:java的动态绑定与双分派)
- Visitor设计模式
- 设计模式--Visitor 模式
- 设计模式_Visitor_访问者模式
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
- 关于数据访问模式(八)—— Resource Pool模式
- ThinkPHP中pathinfo的两种模式、四种路径访问模式和URL重写
- Visitor模式全解
- 让我再罗嗦一下Visitor模式
- HBase学习(一)hbase安装(单机模式)和javaapi客户端访问hbase例子
- Visitor模式-数据主体需要稳定/相互关联三部分组成实现双分派或多分派