访问者模式

来源:互联网 发布:斗鱼直播for mac 编辑:程序博客网 时间:2024/06/12 19:21

访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用与这些元素的新操作。

类图:

适用情境:(结合大话设计模式的例子:男人和女人在不同的状态下有不同的行为表现)

*适用于系统有稳定的数据结构,又易于变化的方法。

          比如,人类只分为男人和女人,在这里,男人和女人都需要用到visitor作为参数,若添加了第三种类型,势必要打开所有继承“viditor”的类添加第三种人应该有的行为方法进去,这就违反了开放封闭原则。相反的,若给人类添加一种新的状态是很容易的,只需要添加新类继承visitor。


优点:将处理从数据结构分离出来

     符合开放封闭原则

缺点:比较繁琐,适用条件比较高,必须明确且有限个对象元素。


特点:双分派技术

           状态作为参数传给元素(第一次分派),将元素自己也作为参数,给具体状态类(第二次分派)

     

如图:两个元素a 、 b ,分别有三个状态,可以组合出如右图六种不同情况。首先假设将状态1作为参数传给元素(第一次分派),这时可以确定状态1,即得到右图蓝色第一个矩形中内容,如何确定是a 还是b呢?在concreteElementA中将自己作为一个参数传递给visitor(第二次分派)



0 0