Lazy loaded image
非循环访问者(acyclic-visitor)
00 分钟
2024-10-9

非循环访客可扩展性 行为的


意图

允许将新函数添加到现有的类层次结构中,而不会影响这些层次结构,也不会创建 GoF 访问者模式固有的麻烦的依赖循环。

解释

现实世界的例子
我们有调制解调器类的层次结构。此层次结构中的调制解调器需要由基于过滤标准的外部算法访问(是 Unix 还是 DOS 兼容的调制解调器)。
简单来说
Acyclic Visitor 允许在不修改层次结构的情况下将函数添加到现有的类层次结构中。
非循环访问者模式允许将新函数添加到现有的类层次结构中,而不会影响这些层次结构,也不会创建 GangOfFour VisitorPattern 固有的依赖循环。
程序示例
这是Modem层次结构。
接下来我们介绍ModemVisitor层次结构。
最后,这里是参观者的行动。
程序输出:

类图

notion image

适用性

可以使用此模式:
  • 当您需要将新功能添加到现有层次结构而不需要更改或影响该层次结构时。
  • 当存在对层次结构进行操作但不属于层次结构本身的功能时。例如 ConfigureForDOS / ConfigureForUnix / ConfigureForX 问题。
  • 当您需要根据对象的类型对对象执行非常不同的操作时。
  • 当访问的类层次结构将频繁地使用 Element 类的新衍生物进行扩展时。
  • 当重新编译、重新链接、重新测试或重新分发 Element 的衍生产品非常昂贵时。

教程

结果

好的:
  • 类层次结构之间没有依赖循环。
  • 如果添加了新的访问者,则无需重新编译所有访问者。
  • 如果类层次结构有新成员,则不会导致现有访问者编译失败。
坏处:
  • 通过表明它可以接受所有访问者但实际上只对特定访问者感兴趣,从而违反了Liskov 的替换原则。
  • 必须为可访问类层次结构中的所有成员创建访问者的并行层次结构。

相关模式

学分

上一篇
flowable获取下一步会创建的用户任务
下一篇
Kafka实现oracle的CDC数据实时变更

评论
Loading...