我正在尝试了解策略模式并提出以下示例:
但是如果我们有
Board
, Piece
, 和 MoveBehavior
对象Board
-> Piece
因为一个 Board
包含 Piece
小号 Piece
-> Board
因为一 block 需要传入Board
作为参数MoveBehavior
这需要 Board
来决定哪些 Action 是可以接受的。 我们怎样才能摆脱这种循环依赖呢?此外,这不是更现实的例子中的常见问题,因为行为需要足够大的状态来做出决定吗?我认为如果行为 super 简单,那么不使用策略模式并不是什么大不了的事。
最佳答案
听起来您可以使用依赖注入(inject)框架来解析所有对象实例。如果您想使用不同的类型组合来实例化,您将需要一个可配置的容器。您可以将可配置容器称为策略(因为它选择了所有起作用的部分)。
我不会让董事会负责创建所有的部分和行为,而是为此使用一个 Composer 类(使用依赖注入(inject))。
这允许您(例如)为板使用行为,或者也可以创建不同的板类型。
另见 this question and answer有关依赖注入(inject)如何帮助获得松散耦合的一些背景知识。
关于design-patterns - 如何从策略模式的这种使用中移除循环依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38615914/