design-patterns - 如何从策略模式的这种使用中移除循环依赖?

标签 design-patterns strategy-pattern

我正在尝试了解策略模式并提出以下示例:

  • 我想创建基于国际象棋的新游戏,除了移动方式不同的棋子。
  • 我还想使用策略模式将行为(它们如何移动)注入(inject)到各个部分中。

  • 但是如果我们有 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/

    相关文章:

    java - 设计一个具有延迟加载特性的 Java POJO

    java - 如何获取策略模式中所有已实现类的列表?

    基于XSD值的Java SAX策略模式

    design-patterns - 解释 "Leader/Follower"模式

    javascript - 当我们需要修改上下文类时实现策略模式

    php 百分比机会

    c++ - 如何创建定义固定值类型的策略模板

    c# - DDD 和依赖注入(inject)

    python - 如何在 Python 中组合自定义对象来创建一个维护底层对象接口(interface)的集合?

    ios - Objective-C,委托(delegate)为适配器模式 : who is the adaptee?