如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)

标签: 设计模式初涉


描述性文字

本节讲解的访问者模式相比起上一节的解释器模式显得稍微易懂一些,
核心其实就是数据结构不变操作可变,结构与操作解耦的一种模式。
同样是先走一波概念,然后写个简单的代码示例帮助理解。


概念相关


定义

封装一些作用域某种数据结构中的个元素的操作,在不改变这个数据结构的
前提下定义作用于这些元素的新的操作。

五个角色

  • Visitor抽象访问者,为每一个具体访问者角色创建一个访问操作接口。
  • ConcreteVisitor具体访问者,实现 Vistor 接口,并实现独自的操作。
  • Element元素角色,定义一个接收访问者方法,以访问者作为参数。
  • ConcreteElement具体元素角色,实现Element接口并实现接收操作。
  • ObjectStructure对象结构,使访问者能够访问到对应的元素。

UML类图

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第1张图片

使用场景

  • 定义复杂的类很少做修改,但经常需要向其添加新的操作。
  • 需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让
    这些操作”污染”这些对象的类,使用访问者模式将这些封装到类中。

优缺点

优点

  • 1.好的扩展性,能在不修改结构元素情况下,为元素添加新功能;
  • 2.好的复用性,通过访问者来定义整个对象结构统一的功能,从而提高复用程度;
  • 3.分离无关行为,把相关的行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一。

缺点

  • 1.不适用于结构中类经常变化的情况
  • 2.破坏封装性,具体元素对访问者公布细节

代码示例

刚好昨天和前天都去游戏机厅玩了,这里用访问者模式写个男女玩家访问游戏机厅
投篮机,跳舞机和开车的例子吧。

先定义元素角色,游戏机接口,只有一个传入访问者实例的方法

接着实现这个接口,定义具体元素,投篮机,跳舞机和开车

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第2张图片

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第3张图片

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第4张图片

再接着写抽象访问者,因为有三个元素,我们写三个访问的方法,传入对应的元素实例

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第5张图片

然后实现抽象访问者,写两个具体访问者,男性玩家与女性玩家

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第6张图片

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第7张图片

另外,还要定义一个对象结构,用来管理元素集合,并且可以迭代供访问者访问

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第8张图片

最后客户端调用

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第9张图片

输出结果

如何让孩子爱上设计模式 ——21.访问者模式(Visitor Pattern)_第10张图片

代码比较简单,就不解释了~


本节代码示例

https://github.com/coder-pig/DesignPatternsExample/tree/master/20.Visitor%20Pattern

你可能感兴趣的:(设计模式初涉,如何让孩子爱上设计模式)