设计模式(c++)笔记之二十(Visitor模式)
一 、描述
概念:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
Visitor 模式在不破坏类的前提下,为类提供增加新的新操作。Visitor 模式的关键是双分派(Double-Dispatch)的技术】。C++语言支持的是单分派。
在 Visitor 模式中 Accept()操作是一个双分派的操作。具体调用哪一个具体的 Accept()操作,有两个决定因素:
1)Element 的类型。因为 Accept()是多态的操作,需要具 体的 Element 类型的子类才可以决定到底调用哪一个 Accept()实现;
2)Visitor 的类型。 Accept()操作有一个参数(Visitor* vis),要决定了实际传进来的Visitor的实际类别才可 以决定具体是调用哪个 VisitConcrete()实现。
描述:
注释:
main(),客户
IVisitor,访问者接口
CBaseVisitor,访问者实现类
CEmployee,被访问者抽象类(员工)
CCommonEmployee,被访问者实现类之一(普通员工)
CManager,被访问者实现类之二(经理)
Convert,整型转字符型方法
说明:A接受B的访问,B主动的执行访问动作。
注意:和观察者的区别是,被观察者要执行一个动作,然后主动发送通知给观察者。访问者模式是由访问者主动发出的动作。
Employee.h
参考文献:《设计模式之禅》,《GoF_23种设计模式解析》
参考博客: http://www.cnblogs.com/wanggary/archive/2011/04/21/2024099.html