【问题标题】:Strategy pattern is like Factory?战略模式就像工厂?
【发布时间】:2013-10-27 14:56:53
【问题描述】:

如果您看起来两者都处理多个对象,那么为什么我们有两种模式来处理一件事呢?他们两者有什么区别?我看过他们俩都看过《四人帮》一书。

【问题讨论】:

  • 我不想强调这一点。一种 OO 语言,尤其是 Java,只有在 实现 模式时可以使用这么多构造 - 你不能真正将它们在代码中的外观(其中必然存在重叠)与其上下文分开以及它们的用途。 (这不是“处理多个对象”。)另一方面,您拥有具有函数式编程功能的语言,其中许多模式become invisible - 工厂、策略和命令都可以使用 lambdas 实现。

标签: design-patterns


【解决方案1】:

如果您学习过 GoF 书籍,那么请研究创建模式和操作模式的区别。另见What is the difference between Factory and Strategy patterns?

【讨论】:

  • 虽然理论上这可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
  • 感谢 khunshan 和 Jan Dvorak。我已经理解了其中的区别,并且我正在深入研究它。欢迎更多的赎罪。
【解决方案2】:

我很惊讶这个问题经常出现,因为工厂和战略完全属于两个不同的类别。工厂是创造的;战略是可操作的。我不需要进一步解释,因为 Stack Overflow 传奇 @tvanfosson 在这件事上创造了这个出色的 post

请记住,两者可以同时共存。你可能有一个工厂,可以生产可以注入到类中的策略。

更有趣的问题是 Strategy 和 Template Method 之间的区别,这两种相似的模式在一个显着方面有所不同。这就涉及到继承与委托的整个讨论,这对于 OO 开发人员来说是一件非常容易理解的事情。

【讨论】:

  • 一些要点:IMO 说得好,@Vidya Factory 只是一种解耦实例所依赖的依赖对象的方法。在 Factory 中,可以在创建期间使用策略在创建策略中选择“运行时”。
  • 我认为混淆来自于两者都倾向于使用接口来完成工作的事实。从某种意义上说,您可以使用策略模式实现工厂。
  • 第二点肯定没错。因为他们做不同的事情,所以他们可以以任何一种方式共存。但接口是所有模式的重要组成部分。
【解决方案3】:

您无法仅通过查看代码或分类来了解差异。要正确掌握 GoF 模式,请寻找它们的意图:

策略:“定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户而变化。”

工厂方法:“定义一个用于创建对象的接口,但让子类决定实例化哪个类。工厂方法让一个类将实例化推迟到子类。”

下面是关于它们的解释:Difference between Factory Method and Strategy design patterns

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2010-10-11
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多