耦合策略和非耦合策略之间的区别是什么?
感谢您的回答。
答案 0 :(得分:3)
当策略类了解上下文或客户端知道策略具体类时,策略就会耦合。
我们可以阅读here(进行一些小修改):
通常每个策略都需要来自上下文的数据,或者必须将一些已处理的数据返回到上下文。这可以通过两种方式实现。
- 创建一些其他类来封装特定数据。
- 将上下文对象本身传递给策略对象。策略对象可以直接在上下文中设置返回数据。
醇>当数据通过时,应分析每种方法的缺点。例如,如果创建了一些类来封装 额外的数据,应特别注意哪些领域 包括在课程中。也许在目前的实施中 添加了必填字段,但未来可能会有一些新策略 具体类需要来自上下文的数据,这些数据不包括在内 那些额外的课程。此时应该指定另一个事实: 一些策略具体类很可能不会 使用在附加类中传递给它的字段。
如果将上下文对象传递给策略,那么我们就可以在策略和上下文之间进行耦合。
关于策略与客户之间的耦合,我们在同一页面中读到:
在客户端应该是模式的经典实现中 意识到战略的具体课程。为了解耦 策略类中的客户端类可以使用工厂类 在context对象内部创建要使用的策略对象。通过 这样做客户端只需要发送参数(如字符串) 要求使用特定算法的上下文,完全是 策略类的解耦。
上下文是否由谁决定策略,解耦是将具体的策略对象注入客户端,因此客户端不知道它是哪个特定的实现,或者是什么其他实现。
因此,一个脱钩的实施是没有人知道其他具体参与者的地方。