访问者模式Visitor

[list]
[*]什么是访问者模式,就是我们通过JAVA的自动类型转换,实现多次转换的模式。
[*]我们如何利用JAVA的特性实现类型的自动转换呢?首先我们看一下访问者模式里面有一下若干角色,访问者(包括抽象和具体访问者),节点(抽象和具体),结构对象。在访问者方法中,我们定义了节点中的方法B调用节点的方法。在节点方法中,我们定义了节点方法A调用访问者方法。这样一来,我们只要调用节点方法A,我们就可以实现动态调用节点方法B的操作。在结构对象中,我们定义一个集合用来放置节点对象。我们在客户端把若干不同的具体节点放入结构对象,并调用节点方法A,由于节点方法A是一个接口方法,这样调用的具体节点对象是什么就对用户透明了。一旦调用开始,JAVA会判断节点对象究竟是那个具体节点对象,然后动态调用访问者方法中的方法。该方法调用了节点对象的B方法(B方法对于不同的具体节点方法名是不同的),这样我们就达到了动态访问的目的。
[*]在什么情况下使用访问者模式呢?首先,由于每个具体节点对象都是在访问者里面定义的,这样才能实现在访问者对象里面对于不同节点对象的动态分配,所以如果要增加或者删除新的节点对象,那么对系统的影响是很大的。但是如果修改节点,譬如让具体节点调用原来不同的方法(非接口方法),那么修改并不大。接口方法是为了实现访问者模式而引入的特殊方法,而真正的业务逻辑方法则是具体节点的其他方法,而这些方法是由访问者来访问的。
[*]访问者模式有如下有点,增加新的操作很容易,具体的访问行为集中到了访问者类中(实现了操作和具体业务逻辑的解耦合,否则具体节点对象就非常复杂),但是缺点很明显,一旦增加新的节点,就需要修改访问者对象,而且需要通盘考虑整个系统,所以这个设计模式的使用需要一些更为慎重,长远的考虑。
[*]和缺省适配器模式配合使用,我们可以增加访问者的层次,也就是说在访问者调用上面也实现动态调用。因为所有的访问者都是VisitAdapter的子类,这样针对不同的对于节点的操作我们设立不同的访问者,可以达到一种比较好的效果。实现不同行为的业务逻辑,而具体实现业务逻辑的节点对象不需要考虑这些调用逻辑。
[/list]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值