访客模式和策略模式有什么区别?

我已经了解了这两种模式,但不了解这两种模式之间的差异。

我不知道场景,何时何地使用这些模式。

任何人都可以解释差异和用例吗?


答案 1

主要区别在于,策略模式封装了一组相关行为,而访客模式封装了多个这样的组。

  • 当您需要封装行为时,您应该使用策略模式 - 如果您有一系列算法,并且需要在运行时从中进行选择,则应使用策略模式。这很常见:每次编程到接口时都会发生这种情况。
  • 您应该使用访客模式来实现双重调度 - 如果您有一组算法需要相对于多个对象是虚拟的。这远不那么常见,部分原因是它更难实现。

答案 2

访客模式意图:

表示要对对象结构的元素执行的操作。Visitor 允许您定义新操作,而无需更改其操作的元素的类。

在以下情况下使用访客模式:

  1. 必须对结构中分组的不同类型的对象执行类似的操作
  2. 您需要执行许多不同且不相关的操作。它将操作与对象分开 结构
  3. 必须在不更改对象结构的情况下添加新操作
  4. 将相关操作收集到单个类中,而不是强制更改或派生类
  5. 将函数添加到您没有源或无法更改源的类库中

尽管访客模式提供了在不更改 Object 中的现有代码的情况下添加新操作的灵活性,但这种灵活性也带来了一个缺点。

如果添加了新的Visitable对象,则需要在Visitor & ConcreteVisitor类中更改代码。有一个解决方法可以解决此问题:使用反射,这将对性能产生影响。

有关更多详细信息,请参阅oodesign文章和源代码制作文章

策略模式意图:

定义一系列算法,封装每个算法,并使其可互换。策略允许算法独立于使用它的客户端。

策略允许您更改对象的内脏。

有关更多详细信息,请参阅下面的 SE 问题:

策略模式的真实示例


推荐