有人可以一劳永逸地向我解释这两者之间的区别,并尝试给出一种何时使用它们的指南?例子非常好。
答案 0 :(得分:8)
INTENT 与结构和实施细节不同。一旦你掌握了INTENT具有重要意义的基本想法,那么你就会走上正确的道路。
Understand the role of intent in design patterns
Intent for Strategy。这是一种行为模式
抽象工厂的意图。这是一种创造性模式
答案 1 :(得分:7)
策略是一种没有一流功能的语言的解决方法。您传入一个策略对象,该对象决定您希望与其余代码分离的某些策略。考虑使用Java进行排序以及它们如何使用Comparators,Comparator是一个策略对象,允许您指定与排序算法分开排序的策略。这允许您通过放弃不同的策略来重用代码。
Abstract Factory是一个用于创建其他对象的对象,抽象部分是您有一个工厂,它返回工厂的实现,工厂的用户通过接口访问它。因此,一个工厂实现可以换成另一个工厂实现而不会更改工厂用户,因为这些用户仅依赖于对象的接口。
答案 2 :(得分:0)
工厂设计模式充当工厂,并根据您的请求在运行时生成不同类型的对象。因此控制是在运行时,您可以在运行时决定所需的对象。因此,对象之间的耦合将会减少。
另一方面,策略设计模式允许您通过使用“拥有”关系而不是“是一种”关系来更好地控制层次结构。因为如果我们试图在更复杂的场景中使用继承(是a),那么我们可能必须覆盖代代相继的方法,并避免代码重用。
假设您创建了一个Animal类(或接口),并且您正在使用移动方法。
你希望通过扩展它来创建一个鸟类。因此,您将在move()方法下添加飞行功能。但企鹅的情况如何呢?他们将有步行功能。
因此,每次通过扩展Animal类创建动物时,都必须一次又一次地重写move()方法。您可以清楚地了解move()方法更容易受到更改,因此最佳实践是将更改的部分与核心代码分开。
我们可以为move()方法创建一个单独的层次结构。您可以通过setter方法将相关的move()方法分配给对象。因此控制权传递给运行时。下图说明了这一事实;
以下是我的2篇博客文章,如果您愿意,可以参考它们以获取更多详细信息。