有人能够一劳永逸地向我解释这两者之间的区别,并试图给出何时使用其中每一个的指导方针?例子会非常好。策略设计模式与抽象工厂模式有什么区别?
回答
战略是没有一流的功能,语言的解决方法。您传入一个策略对象,该策略对象决定您想要与其余代码分离的某个策略。考虑Java中的排序以及它们如何使用比较器,比较器是一个策略对象,允许您从排序算法中单独指定排序策略。这允许您通过放弃不同的策略来重用代码。
抽象工厂是用来创建其他对象,用抽象的部分是,你有一个工厂,返回工厂,一个实施的对象,其中的工厂访问它通过接口的用户。因此,一个工厂实现可以替换为另一个工厂实现,因为这些用户仅取决于对象的接口。
的意向比结构和实现细节不同的其他。一旦你掌握了这个关于INTENT意义重大的基本思想,那么你将走在正确的道路上。
Understand the role of intent in design patterns
Intent for Strategy。这是行为模式
- 定义一系列算法,封装每一个算法,并使它们可以互换。策略可以让算法独立于使用它的客户端。
- 捕获接口中的抽象,在派生类中隐藏实现细节。
抽象工厂的意图。这是一个创建模式
- 提供一个接口,用于创建相关或依赖对象的族,而不指定它们的具体类。
- 一个层次封装:许多可能的“平台”,以及一套“产品”的构建。
好吧,那比什么意图/立志叫他们每个人的目标是?我警告说,startegy更接近于拾取正确的算法......但找不到依靠 – RanZilber 2011-02-07 20:46:56
工厂设计模式充当工厂,并根据您的请求在运行时生成不同种类的对象。所以控制是在运行时间,你可以在运行时决定你需要的对象。所以物体之间的耦合将会减少。
。另一方面,战略设计模式,允许您使用采取分层结构的更好的控制“有一个”关系在“是”的关系。因为如果我们试图在更复杂的场景中使用继承(是),那么我们可能必须覆盖继承代世代的方法,并且它避免了代码重用。
假设你创建了一个动物类(或接口),并且你有一个移动方法。
你希望通过扩展它来创建一个鸟类。因此,您将在move()方法下添加飞行功能。但企鹅的情况如何?他们将有步行功能。
因此,每次通过扩展Animal类创建动物时,您都必须重复移动move()方法。你可以清楚地理解move()方法更容易受到变化的影响,所以最好的做法是将变化的部分从核心代码中分离出来。
简单地说,我们可以创建一个单独的层次结构来移动()方法。您可以通过setter方法将相关的move()方法分配给对象。所以控制传递给运行时间。下图说明了这一事实;
以下是我的博客文章2,如果你喜欢,你可以参考他们的进一步细节。
更好。我鼓励你在一般情况下经常关注你的博客,即使有更好的答案也要小心。这一个符合'披露'要求,但几乎是毫无意义的绒毛。太多的答案是这样的,你可能会被标记为垃圾邮件。 – 2012-09-06 20:21:38
- 1. 策略和工厂设计模式有什么区别?
- 2. 工厂方法和抽象工厂设计模式有什么区别?
- 3. 了解抽象工厂设计模式中的抽象工厂设计模式
- 4. 工厂模式抽象工厂模式
- 5. 工厂方法设计模式中的工厂设计模式与目标c中的抽象工厂有什么区别?
- 6. 抽象工厂设计模式c#
- 7. 抽象工厂设计模式 - C#
- 8. 设计模式 - 抽象工厂 - BombedMazeFactory
- 9. 工厂和管道设计模式有什么区别?
- 10. 抽象工厂设计模式的缺点是什么?
- 11. 抽象工厂模式
- 12. 抽象工厂模式
- 13. 抽象工厂模式
- 14. 工厂和抽象工厂模式
- 15. DI与工厂模式有什么区别?
- 16. 与抽象工厂模式澄清后
- 17. OOD:将工厂模式与策略模式结合使用
- 18. 设计模式 - 策略模式
- 19. 策略设计模式
- 20. Multipe策略设计模式
- 21. 这是一个有效的抽象工厂设计模式吗?
- 22. 具有默认实现的抽象工厂设计模式
- 23. 设计模式和架构模式有什么区别?
- 24. 策略模式与工厂类别单元测试
- 25. 访客和策略模式有什么区别?
- 26. 服务定位器和工厂设计模式有什么区别?
- 27. 结合泛型MVP模式与抽象工厂模式
- 28. 新的设计模式/设计策略
- 29. 工厂模式设计
- 30. iOS工厂设计模式
+1的第一句 – thepirat000 2014-08-07 05:53:17