有人能彻底解释一下这两者之间的区别,并尝试提供一种使用它们的指南吗?例子会很好。
有人能彻底解释一下这两者之间的区别,并尝试提供一种使用它们的指南吗?例子会很好。
策略模式是一种解决没有一级函数的语言的方法。您可以传递一个策略对象来决定某些您想要与其余代码分离的策略。比如在Java中进行排序时,使用比较器(Comparator)作为策略对象,它允许您单独指定排序策略而不影响排序算法。这使您可以通过插入不同的策略来重用代码。
抽象工厂是用于创建其他对象的对象,其中抽象部分是您有一个工厂返回工厂的实现,而工厂的用户通过接口访问它。因此,一个工厂实现可以被另一个替换而不影响工厂的用户,因为这些用户只依赖于对象的接口。
工厂设计模式充当一个工厂,在运行时根据您的请求生成不同类型的对象。因此,控制权在运行时,并且您可以在运行时决定所需的对象。因此,对象之间的耦合将减少。
另一方面,策略设计模式允许您使用“具有”关系而不是“是”关系更好地控制分层结构。因为如果我们在更复杂的情况下尝试使用继承(是一个),那么我们可能必须覆盖代代继承的方法,这会避免代码重用。
假设您创建了一个Animal类(或接口),并且其中有一个move方法。
您希望通过扩展它来创建一个鸟类。因此,您将在move()方法下添加飞行功能。但是企鹅呢?他们将具有行走功能。
因此,每次通过扩展Animal类创建动物时,您都必须再次覆盖move()方法。您可以清楚地理解move()方法更容易受到更改的影响,因此最佳实践是将可变部分与核心代码分离。
简单地说,我们可以创建一个单独的层次结构来处理move()方法。您可以通过setter方法将相关的move()方法分配给对象。因此,控制权传递到运行时。以下图表说明了这一事实:
以下是我的两篇博客文章,如果您有兴趣,可以参考它们以获取更多详细信息。