回答

7

战略是没有一流的功能,语言的解决方法。您传入一个策略对象,该策略对象决定您想要与其余代码分离的某个策略。考虑Java中的排序以及它们如何使用比较器,比较器是一个策略对象,允许您从排序算法中单独指定排序策略。这允许您通过放弃不同的策略来重用代码。

抽象工厂是用来创建其他对象,用抽象的部分是,你有一个工厂,返回工厂,一个实施的对象,其中的工厂访问它通过接口的用户。因此,一个工厂实现可以替换为另一个工厂实现,因为这些用户仅取决于对象的接口。

+1

+1的第一句 – thepirat000 2014-08-07 05:53:17

8

意向比结构和实现细节不同的其他。一旦你掌握了这个关于INTENT意义重大的基本思想,那么你将走在正确的道路上。

Understand the role of intent in design patterns

Intent for Strategy。这是行为模式

  1. 定义一系列算法,封装每一个算法,并使它们可以互换。策略可以让算法独立于使用它的客户端。
  2. 捕获接口中的抽象,在派生类中隐藏实现细节。

抽象工厂的意图。这是一个创建模式

  1. 提供一个接口,用于创建相关或依赖对象的族,而不指定它们的具体类。
  2. 一个层次封装:许多可能的“平台”,以及一套“产品”的构建。
+0

好吧,那比什么意图/立志叫他们每个人的目标是?我警告说,startegy更接近于拾取正确的算法......但找不到依靠 – RanZilber 2011-02-07 20:46:56

0

工厂设计模式充当工厂,并根据您的请求在运行时生成不同种类的对象。所以控制是在运行时间,你可以在运行时决定你需要的对象。所以物体之间的耦合将会减少。

。另一方面,战略设计模式,允许您使用采取分层结构的更好的控制“有一个”关系在“是”的关系。因为如果我们试图在更复杂的场景中使用继承(是),那么我们可能必须覆盖继承代世代的方法,并且它避免了代码重用。

假设你创建了一个动物类(或接口),并且你有一个移动方法。

你希望通过扩展它来创建一个鸟类。因此,您将在move()方法下添加飞行功能。但企鹅的情况如何?他们将有步行功能。

因此,每次通过扩展Animal类创建动物时,您都必须重复移动move()方法。你可以清楚地理解move()方法更容易受到变化的影响,所以最好的做法是将变化的部分从核心代码中分离出来。

简单地说,我们可以创建一个单独的层次结构来移动()方法。您可以通过setter方法将相关的move()方法分配给对象。所以控制传递给运行时间。下图说明了这一事实;

enter image description here

以下是我的博客文章2,如果你喜欢,你可以参考他们的进一步细节。

  1. Factory Design pattern

  2. Strategy Design pattern

+0

更好。我鼓励你在一般情况下经常关注你的博客,即使有更好的答案也要小心。这一个符合'披露'要求,但几乎是毫无意义的绒毛。太多的答案是这样的,你可能会被标记为垃圾邮件。 – 2012-09-06 20:21:38