《设计模式:可复用软件对象软件的基础》的阅读笔记 -第二章 2.8 visitor模式
访问者模式(Visitor Pattern)
定义
访问者模式表示一个作用于某对象结构中的各个元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
适合对稳定类结构对象做许多不同的事情的情况,访问者可以跨越类结构层次,增加一个新的访问者不需要改变类对象。
但是如果类结构增加了子类,就需要对更新所有访问者接口这对这个子类的visit操作。可以使用
主要参与者
-
Visitor(访问者):声明一个访问操作接口,该接口中的每个操作元素对应一个需要访问的对象类的元素。具体访问者则实现了这些操作。
-
Element(元素):定义一个接受访问者的方法,一般称为
accept(),它以一个访问者作为参数。 -
ConcreteElement(具体元素):实现了
Element中的accept()方法,通常会调用访问者的访问方法来完成对一个元素的操作。 -
ObjectStructure(对象结构):能够枚举它的元素,提供一个接口让访问者可以访问它的元素。
优点
-
扩展性好:增加新的操作变得容易,只需要增加新的访问者类即可,符合开闭原则。
-
封装性好:将数据结构和操作分离,使得操作集合可独立变化。
缺点
-
违反了单一职责原则,将数据结构和算法耦合到了一起。
-
对象结构变化困难:若要增加新的元素类,需要修改访问者接口及所有具体访问者类,违反了开闭原则。
应用场景
-
需要对对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作“污染”这些对象的类。
-
当需要对一个组合结构中的对象进行很多不同类型的操作,而操作算法又彼此独立时。
通过桥接模式和访问者模式,作者们展示了如何在设计文档编辑器时,封装实现依赖关系,提高系统的灵活性和可扩展性。

浙公网安备 33010602011771号