【问题标题】:Strategy Pattern Java策略模式 Java
【发布时间】:2018-05-20 22:25:02
【问题描述】:

我对 java 中的策略模式有疑问。在第一张图中,我们可以看到策略模式的定义。上下文由一个策略接口组成,上下文可以是任何需要改变行为的东西——也许是一个提供排序功能的类。

策略被简单地实现为一个接口,因此我们可以在不影响上下文的情况下交换 ConcreteStrategys。

现在让我们看第二张图,.假设我们使用策略模式。类 ConcreteStrategyA 和 ConcreteStrategyB 需要调用客户端来执行它们实现的算法。

您需要客户端接口接口的任何原因?

【问题讨论】:

  • 你的具体策略不应该是打电话给客户。你想解决什么问题?
  • @Reasurria 是的,我知道,但是为什么我不直接调用客户端,而是使用接口,但我想知道为什么我应该使用接口而不是直接调用客户端
  • 对不起,我的意思是具体策略并不意味着即使通过接口也可以调用客户端。这种双向依赖似乎很奇怪。如果您认为这是正确的,那么可能有几个原因需要针对该界面进行操作。例如,允许在单元测试期间模拟您的客户端或从您的实现中删除对特定客户端的依赖。
  • “例如,允许在单元测试期间模拟您的客户端或从您的实现中删除对特定客户端的依赖。” @Reasurria 我正在寻找的答案,如果你愿意,你可以将其标记为答案:)

标签: design-patterns class-diagram


【解决方案1】:

您可能希望对接口进行操作,以允许在单元测试期间模拟客户端或从您的具体策略中删除对特定客户端实现的依赖。

【讨论】: