我与C++设计模式(十九)——访客模式
来源:互联网 发布:oracle 输入数据 编辑:程序博客网 时间:2024/06/09 20:19
根据visitor pattern的设计初衷是,为了解决在客户加需求后不大范围破坏原有系统构造而设计的,将更新(变更)封装到一个类中,并由待更改类提供一个接口。
UML图:
其实不不太懂这句话,看图也没有很好的理解,但是,我看到了这篇文章,太棒了,文章中举得例子也很棒,对于visitor他只是一个接口visit(),不过他的各个子类能够用这个visit函数访问任意一个element的成员,当然这个前提是element给我们提供了一个缺口,专业一点,应该叫接口,accept,accept有一个形参:visitor指针,调用这个visitor指针的visit函数,这是一个“双重分派过程”,记住这个词,以为真正在运行时调用哪个visit函数,第一要看element指针指向那个子类对象,第二要看传入的形参指针accept指向的是哪个visitor子类,他们共同决定了调用哪个visit函数。不同的visitor子类中实现了不同visit函数,visit函数有一个element指针类型的形参,如例中income子类能够用更改收入,vacation子类能够更改休假。再来理解该文章中这一段话就容易了:
访问者模式适用于数据结构相对未定的系统(收入可能要变,假期也可能要变),它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。
数据结构的每一个节点都可以接受一个访问者的调用,此节点向访问者对象传入节点对象,而访问者对象则反过来执行节点对象的操作。这样的过程叫做"双重分派"。节点调用访问者,将它自己传入,访问者则将某算法针对此节点执行。
双重分派意味着施加于节点之上的操作是基于访问者和节点本身的数据类型,而不仅仅是其中的一者。
我已经不打算传入自己的代码了,这篇文章的代码足够了。。。- 我与C++设计模式(十九)——访客模式
- 设计模式—命令模式(十九)
- 设计模式,就这么回事——访客模式
- 设计模式笔记(十九) —— 命令模式
- 设计模式(十九)——命令模式
- 《Android源码设计模式解析与实战》读书笔记(十九)——组合模式
- 设计模式(c++)笔记之十九(Command模式)
- JAVA设计模式(二十九)——设计模式总结
- 设计模式讲解与代码实践(十九)——备忘录
- 设计模式学习(十九)————迭代器模式
- JAVA设计模式(十九)——模版方法模式
- 十九、命令模式——设计模式学习笔记
- Java设计模式(十九)----备忘录模式
- 设计模式(十九)命令模式
- 设计模式(十九) 备忘录模式
- Android设计模式(十九)-适配器模式
- 《Android源码设计模式解析与实战》读书笔记(十九)
- 十九、适配器设计模式
- isPalidrome()函数检测回文字符串
- 游戏框架其九:3D图像之数学基础
- 经典中的博弈:第一章 C++的Hello,World!
- 算术表达式的合法性判断与求值(上)
- STM32硬件IIC操作
- 我与C++设计模式(十九)——访客模式
- Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
- Note for video Machine Learning and Data Mining——training vs Testing
- BAE tomcat+java
- 【Java.Web】JSP —— 标签库taglib —— 第三方标签库 —— JSTL Core
- 打印数字金字塔
- nyoj 322 Sort 【树状数组】
- opencv2中对图像ROI的理解及遍历操作
- AndroidSDK和ADT下载地址