设计模式(22) - 访问者模式

来源:互联网 发布:dateadd sql server 编辑:程序博客网 时间:2024/06/05 07:38
 问题描述

集合的节点元素类型相对稳定,但是,在遍历集合各个节点元素的时候,针对不同类型节点元素的访问操作各不相同;并且将来更可能会添加新的访问操作。如果把这些访问操作实现成节点元素的方法,那么这种访问方法就成为节点类型的一个变化点。如何避免对节点元素的修改而又支持新的节点方法呢?访问者模式!

访问者模式

如图所示,由于系统中元素节点类型相对稳定(例如ConcreteElementA & ConcreteElementB),Visitor类型定义了访问每个节点元素的方法(即VisitConcreteElementA() & VisitConcreteElementB()),这个Visitor接口定义会保持相对稳定。Element类型定义了一个抽象接口VisitMe(Visitior* v);节点元素ConcreteElementA和ConcreteElementB实现VisitMe()接口非常简单:以this指针作为参数调用Visitor定义的访问自己接口。显然,当系统需要提供不同的访问Element方法的时候,只要继承Visitor接口并实现相应的访问方法即可;这个过程对于Element节点元素保持透明。


讨论

系统在遍历节点元素的过程中,为不同的节点元素提供不同的访问方法;创建新的Visitor具体类可以方便的定义节点元素的新的访问方法而不影响Element的设计,这就是访问者模式为程序提供的一种封装变化点的方法。访问者模式隔离了元素和元素的访问方法。客户通过一个Visitor对象就可以遍历集合中不同的节点类型并自动调度节点相关的访问方法。

0 0
原创粉丝点击