设计模式: 访问者模式

文章目录

一、介绍

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

二、模式结构

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

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

三、优缺点

1、优点

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

2、缺点

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

四、应用场景

  • 当一个系统需要对一个对象结构中的对象进行很多不同的操作(这些操作彼此不相关),同时又不希望这些操作的方法定义在元素的类的里面时。
  • 当需要对一个对象结构中的对象进行与对象本身无关的操作时。
  • 当这些操作以后会动态地增加或减少时。
相关推荐
电子科技圈1 小时前
智能化加速标准和协议的更新并推动验证IP(VIP)在芯片设计中的更广泛应用
经验分享·科技·嵌入式硬件·设计模式
SomeB1oody2 小时前
【Rust自学】17.3. 实现面向对象的设计模式
开发语言·设计模式·rust
NorthCastle18 小时前
设计模式-创建型模式-原型模式
设计模式·原型模式
玖石书1 天前
【高内聚】设计模式是如何让软件更好做到高内聚的?
设计模式
晚秋贰拾伍1 天前
设计模式的艺术-观察者模式
运维·观察者模式·设计模式·运维开发
小王子10241 天前
设计模式Python版 建造者模式
python·设计模式·建造者模式
Cikiss2 天前
「全网最细 + 实战源码案例」设计模式——适配器模式
java·后端·设计模式·适配器模式
NorthCastle2 天前
设计模式-创建型模式-抽象工厂模式
设计模式·抽象工厂模式
咖啡の猫3 天前
解释器模式
设计模式·解释器模式
Cikiss3 天前
「全网最细 + 实战源码案例」设计模式——原型模式
java·后端·设计模式·原型模式