设计模式: 访问者模式

文章目录

一、介绍

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

二、模式结构

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

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

三、优缺点

1、优点

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

2、缺点

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

四、应用场景

  • 当一个系统需要对一个对象结构中的对象进行很多不同的操作(这些操作彼此不相关),同时又不希望这些操作的方法定义在元素的类的里面时。
  • 当需要对一个对象结构中的对象进行与对象本身无关的操作时。
  • 当这些操作以后会动态地增加或减少时。
相关推荐
Aniugel8 分钟前
JavaScript高级面试题
javascript·设计模式·面试
不当菜虚困26 分钟前
JAVA设计模式——(四)门面模式
java·开发语言·设计模式
Niuguangshuo29 分钟前
Python设计模式:MVC模式
python·设计模式·mvc
YHY_13s33 分钟前
访问者模式
c++·访问者模式
Lei活在当下1 小时前
【现代 Android APP 架构】01. APP 架构综述
android·设计模式·架构
前端大白话1 小时前
震惊!90%前端工程师都踩过的坑!computed属性vs methods到底该怎么选?一文揭秘高效开发密码
前端·vue.js·设计模式
前端大白话1 小时前
前端必看!figure标签在响应式图片排版中的王炸操作,grid/flex布局实战指南
前端·设计模式·html
ApeAssistant1 小时前
Spring + 设计模式 (十四) 行为型 - 观察者模式
spring·设计模式
ApeAssistant1 小时前
Spring + 设计模式 (十三) 行为型 - 策略模式
spring·设计模式
摘星编程2 小时前
并发设计模式实战系列(7):Thread Local Storage (TLS)
设计模式·并发编程