oop - 'Strategy Design Pattern' 不就是多态的基本用途吗?

标签 oop design-patterns interface polymorphism strategy-pattern

策略设计模式 , 我们所做的是

  • 创建一个通用接口(interface)。
  • 使用具有重写方法的接口(interface)实现一组类。
  • 让运行时为与该公共(public)接口(interface)具有相同类型的对象选择实际类,并调用将根据类正确解析的覆盖方法。

  • 我的问题是,这不就是我们学习的多态性和方法覆盖的基本例子吗?

    除了使用抽象类的可能性之外,替换通用接口(interface)。

    最佳答案

    您描述的是一种实现策略模式的方法。您还描述了如何实现很多不同的设计,因为我们可能想要创建一个通用接口(interface)、进行不同的实现并在运行时为不同的情况选择一个的原因有很多很多。

    还有其他方法可以实现策略模式。

    但是,你知道,设计不是代码。设计是软件如何工作的心智模型——一个人的东西,而不是比特。设计模式是为常见问题组合解决方案的常用方法。它再次发生在您的脑海中,而不是位。

    特别是策略模式是关于使用可互换算法制作对象,其中任何一种算法都可以用于特定目的。

    所以,是的,你定义了一个接口(interface)......但它不是数据对象的接口(interface)——它没有 getter 和 setter 以及 state mutators 等。接口(interface)定义了对象如何与用于的算法交互一个特定的目的。国际象棋游戏可能使用“玩家”策略,例如,使用名为“SelectNextMove”的方法。

    而且,是的,您实现了该接口(interface),但实现不是成为包含对象的“部分”的“事物”,它们是不同的算法,可用于执行对象所需的任何功能。国际象棋游戏可以支持许多不同的策略,这些策略可以用来为计算机玩家选择下一步行动。

    因此,例如,当您在考虑国际象棋游戏的设计时,您可能会发现将选择下一步棋的策略与模拟棋盘的对象分开考虑并确保选定的棋步是有用的被正确记录、传达和呈现。选择下一步行动的策略与这些无关。

    如果你是一个优秀的软件设计师,你也会独立编写代码,这样代码中的关注点分离将反射(reflect)你头脑中的关注点分离,让维护代码的人更容易以最有用的方式思考它方式,并允许在您需要时换入和换出选择下一步行动的新策略。

    关于oop - 'Strategy Design Pattern' 不就是多态的基本用途吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37670842/

    相关文章:

    oop - 与 OOP 中的 'Ancestor' 相反

    java - 基于另一个抽象类的子类创建抽象类的子类,而不知道它们的类型

    java - 服务器端应用程序中内部类的好处

    javascript - 使用 React 和 Redux 在 UI 中处理成功的 REST POST 操作的常见方法是什么

    java - 缩进接口(interface)的多个实现的公认做法是什么

    java - 如何在java中的抽象类中实现接口(interface)并扩展线程

    Javascript 面向对象语法

    java - 如何从装饰器模式中删除装饰对象?

    ios - 使用单例作为数据管理器类不好吗?

    Java多重继承,无需源代码