设计模式: 访问者模式

文章目录

一、介绍

Visitor 模式(访问者模式)是一种行为设计模式,它允许在不修改对象结构的前提下,增加作用于一组对象上新的操作。就增加新的操作而言,Visitor 模式把新的操作作为访问者(Visitor)加到对象中,而不是修改那些类的代码。这样,新的操作就可以被应用到所有对象上,而无需修改这些对象的类。

二、模式结构

Visitor 模式主要包含以下几个角色:

  • Visitor(访问者):接口声明了一个或多个访问操作,形成所有的具体元素角色必须实现的接口。
  • ConcreteVisitor(具体访问者):实现 Visitor 接口,也就是实现一个具体的访问操作。
  • Element(元素):声明了一个接受访问者对象的方法(即 accept 方法),该方法通常是一个空实现或只声明了接口。
  • ConcreteElement(具体元素):实现了 Element 接口,存储或定义了一个相关的数据操作,并可以定义一个或多个 accept 操作,以便接受访问者的访问。
  • ObjectStructure(对象结构):是一个元素的集合,且能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。

三、优缺点

1、优点

  • 增加新的操作很容易:只需要增加一个新的访问者类即可。
  • 将有关的行为集中到一个访问者对象中:而不是分散到多个元素类中。
  • 可以绕过通常的继承机制,来访问和修改一个类的内部状态。
  • 使得增加新的元素类变得容易:因为接受操作被集中在一个访问者接口中,所以增加新的元素类不需要修改访问者类的代码。

2、缺点

  • 增加新的元素类很困难:每增加一个新的元素类,都需要在所有的具体访问者类中增加相应的具体操作实现,这违反了"开闭原则"。
  • 破坏封装:访问者可以访问并修改元素的状态,这可能会违反封装原则。

四、应用场景

  • 当一个系统需要对一个对象结构中的对象进行很多不同的操作(这些操作彼此不相关),同时又不希望这些操作的方法定义在元素的类的里面时。
  • 当需要对一个对象结构中的对象进行与对象本身无关的操作时。
  • 当这些操作以后会动态地增加或减少时。
相关推荐
huang_xiaoen6 小时前
java设计模式之桥接模式(重生之我在地府当孟婆)
设计模式·桥接模式
HappyGame026 小时前
设计模式-观察者模式
观察者模式·设计模式
渊渟岳7 小时前
掌握设计模式--解释器模式
设计模式
牵牛老人17 小时前
C++设计模式-责任链模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·责任链模式
肥仔哥哥193018 小时前
设计模式分类与定义(高软55)
设计模式·软考·高软·设计模式分类
云徒川21 小时前
【设计模式】过滤器模式
windows·python·设计模式
找了一圈尾巴1 天前
设计模式(结构性)-代理模式
设计模式·代理模式
渊渟岳1 天前
掌握设计模式--模板方法模式
设计模式
程序员JerrySUN2 天前
设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解
设计模式·工厂方法模式
牵牛老人2 天前
C++设计模式-迭代器模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·迭代器模式