策略模式:耦合策略与非耦合策略。

4

耦合策略和非耦合策略有什么区别?

谢谢回答。

1个回答

3

当策略类具有上下文知识,或客户端了解策略具体类时,策略将被耦合。

我们可以在这里(稍作编辑)中阅读:

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

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

当需要传递数据时,应分析每种方法的缺点。例如,如果创建了一些附加类来封装 额外的数据,则应特别注意哪些字段包含在类中。也许在当前实现中所有 所需字段都已添加,但也可能在未来某些新的策略具体类需要来自上下文的数据, 而这些数据不包括在那些附加类中。此处还应指出另一个事实: 很可能会有一些策略具体类不使用在附加类中传递给它的字段。

如果将上下文对象传递给策略,则策略和上下文之间存在耦合关系。
关于策略和客户端之间的耦合,在同一页中我们可以看到:
在模式的经典实现中,客户端应该知道策略具体类。为了使客户端类与策略类解耦,可以在上下文对象内部使用工厂类来创建要使用的策略对象。通过这样做,客户端只需向上下文发送一个参数(如字符串),请求使用特定算法,完全与策略类无关。
无论是上下文决定策略,还是将具体策略对象注入客户端进行解耦,客户端都不知道具体实现是什么,或者有哪些其他实现。
因此,解耦实现是指没有人知道其他具体参与者的实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接