战略模式:耦合战略与非耦合战略

时间:2014-01-30 12:35:50

标签: design-patterns strategy-pattern decoupling coupling

耦合策略和非耦合策略之间的区别是什么?

感谢您的回答。

1 个答案:

答案 0 :(得分:3)

当策略类了解上下文或客户端知道策略具体类时,策略就会耦合。

我们可以阅读here(进行一些小修改):

  

通常每个策略都需要来自上下文的数据,或者必须将一些已处理的数据返回到上下文。这可以通过两种方式实现。

     
      
  1. 创建一些其他类来封装特定数据。
  2.   
  3. 将上下文对象本身传递给策略对象。策略对象可以直接在上下文中设置返回数据。
  4.         

    当数据通过时,应分析每种方法的缺点。例如,如果创建了一些类来封装   额外的数据,应特别注意哪些领域   包括在课程中。也许在目前的实施中   添加了必填字段,但未来可能会有一些新策略   具体类需要来自上下文的数据,这些数据不包括在内   那些额外的课程。此时应该指定另一个事实:   一些策略具体类很可能不会   使用在附加类中传递给它的字段。

如果将上下文对象传递给策略,那么我们就可以在策略和上下文之间进行耦合。

关于策略与客户之间的耦合,我们在同一页面中读到:

  

在客户端应该是模式的经典实现中   意识到战略的具体课程。为了解耦   策略类中的客户端类可以使用工厂类   在context对象内部创建要使用的策略对象。通过   这样做客户端只需要发送参数(如字符串)   要求使用特定算法的上下文,完全是   策略类的解耦。

上下文是否由谁决定策略,解耦是将具体的策略对象注入客户端,因此客户端不知道它是哪个特定的实现,或者是什么其他实现。

因此,一个脱钩的实施是没有人知道其他具体参与者的地方。