Design patterns 战略模式像工厂?

Design patterns 战略模式像工厂?,design-patterns,Design Patterns,如果你看两者都处理多个对象,那么为什么我们有两种模式来处理一件事呢?两者的区别是什么?我都看过《四人帮》一书。如果你读过《四人帮》一书,那就研究一下创作模式和运作模式的差异。另请参见我很惊讶这个问题经常出现,因为工厂和战略完全属于两个不同的类别。工厂是创造性的;战略是可操作的。我不需要进一步解释,因为Stack Overflow legend在这个问题上创造了这一优秀的解决方案 还要记住,两者可以同时并存。您可能有一个工厂,它生成可以注入类的策略 更有趣的问题是策略和策略之间的差异,这两种相似的

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

如果你读过《四人帮》一书,那就研究一下创作模式和运作模式的差异。另请参见

我很惊讶这个问题经常出现,因为工厂和战略完全属于两个不同的类别。工厂是创造性的;战略是可操作的。我不需要进一步解释,因为Stack Overflow legend在这个问题上创造了这一优秀的解决方案

还要记住,两者可以同时并存。您可能有一个工厂,它生成可以注入类的策略


更有趣的问题是策略和策略之间的差异,这两种相似的模式在一个重要方面有所不同。这就是继承与委派的整个讨论,这对于OO开发人员来说是一件非常好的事情

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

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

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


这里有一个关于它们的解释:

虽然这可以从理论上回答这个问题,但这里要包括答案的基本部分,并提供链接供参考。谢谢khunshan和Jan Dvorak。我已经理解了其中的区别,我正在进一步挖掘。更多的补偿将受到欢迎。可能的重复我不想强调这一点。OO语言,尤其是Java,在实现模式时,只有这么多的结构可以使用——你不能真正将它们在代码中的外观(必然会有重叠)与其上下文以及它们的用途分开。(这不是“处理多个对象”。)在另一方面,你有具有函数式编程功能的语言,其中许多模式——工厂、策略、,而且所有命令都可以使用lambdas实现。一些要点:IMO很好地说@Vidya Factory只是一种解耦实例所依赖的依赖对象的方法。在工厂中,可以在创建过程中使用一种策略来选择创建策略中的“运行时”。我认为混淆是因为两者都倾向于使用接口来完成工作。从某种意义上说,你可以用一种战略模式来实现一个工厂。第二点当然是正确的。因为他们做不同的事情,他们可以以任何方式共存。但是接口是所有模式中的一大部分。