行为型模式设计模式--访问者模式

访问器模式

访问器模式(Visitor Pattern)是行为型设计模式,专门处理多个对象结构的访问,依赖于对象的类型。访问器能够根据对象的具体类型执行合适的操作,而无需修改对象的类。即允许将算法与对象结构分离
访问器模式的核心思想是:在不修改对象结构的前提下,定义作用于这些对象的新操作

模式特点:双重分发(double dispatch)
什么是双重分发?
在传统的单一分发机制中,方法调用仅根据调用者的类型来决定具体执行哪个方法。例如,在多态中,只会根据调用方法的对象类型来选择实现的版本。
双重分发则引入了第二个参数的类型,使得方法的选择不仅取决于调用者的类型,还取决于参数的类型。在访问器模式中,双重分发是一种关键机制,用于确保在请求时可以根据对象的具体类型动态地选择适当的行为。双重分发允许系统在运行时根据两个不同对象的类型来确定调用哪个方法。

Visitor模式通过双重分发来实现在不更改(不添加新的操作-编译时)Element类层次结构的前提下,在运行时透明地为类层次结构上的各个类动态添加新的操作(支持变化)。

缺点: 访问器模式要求元素的具体类(即被访问的类)必须是固定的,因为每个新元素都需要在访问者接口中实现一个新的访问方法。这意味着如果要从外部系统中引入新的元素,或者对现有的元素层次结构进行修改,你需要修改所有访问者类。

访问器模式的组成

  1. Visitor(访问器接口)
    • 定义访问对象结构中各个元素的操作接口,通常为每个具体元素类提供一个访问方法。
  2. ConcreteVisitor(具体访问器)
    • 实现访问器接口,定义对具体元素类的操作。
  3. Element(元素接口)
    • 定义接受访问器的接口,通常是一个 accept 方法。
  4. ConcreteElement(具体元素)
    • 实现元素接口,提供具体的 accept 方法实现,通常调用访问器的访问方法。
  5. ObjectStructure(对象结构)
    • 包含一组元素对象,并提供遍历这些元素的方法。

访问器模式的应用场景

  • 对象结构稳定,但操作频繁变化(需要频繁添加新的操作时),可以使用访问器模式。
  • 需要集中相关操作。访问器模式可以将相关的操作集中在一个访问器中,使得代码更加清晰和可维护。
  • 需要避免污染元素类。当需要避免将大量的操作代码放入元素类中时,可以使用访问器模式。

实现功能扩展区分于装饰模式,它们的关注点完全不同:

装饰模式关注于动态增强单个对象的功能,
而访问器模式关注于对多个不同类型结构进行操作的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值