工厂模式有啥好处? [复制]

Posted

技术标签:

【中文标题】工厂模式有啥好处? [复制]【英文标题】:what's the advantage of factory pattern? [duplicate]工厂模式有什么好处? [复制] 【发布时间】:2012-02-26 19:26:56 【问题描述】:

可能重复:What are the practical uses of Factory Method Pattern?Differences between Abstract Factory Pattern and Factory Method

我目前对工厂的理解是它可以通过输入字符串来创建对象,比如说

Factory.create("mouse");
Factory.create("hamster");

这种模式与新模式相比有什么优势?

【问题讨论】:

您将如何使用new 做到这一点? 另一个可能的重复:***.com/questions/751804/… 【参考方案1】:

当您需要创建复杂的产品(即“封装”复杂的产品创建过程)、对多个产品具有单点控制或需要管理这些产品的生命周期和/或资源时,最好创建工厂产品从单一参考点消费。在某些情况下,用“new”重写产品实例化和处理代码过于复杂,因此工厂方法确保重用和统一性,同时最大限度地减少潜在的编码错误。

例如,在可视化编程 IDE 中,您在同时打开 2 个或更多项目中使用工具包;该工具包及其功能很可能由工厂模式实例化,因为它在图形和逻辑上非常复杂,并且需要仔细管理其一个或多个实例。

【讨论】:

【参考方案2】:

如果您想通过共享工厂“协调”不同对象(在您的示例中为鼠标和仓鼠)的创建,工厂非常有用。这可用于(a)为公共超类(例如您的示例中的 Animal)的每个子类抽象出特定的构造函数详细信息,或(b)根据对象(或动物)的类型为构造函数提供默认参数被创建。

它可用于统一创建具有共同性的对象,例如在缓存中:CacheFactory -> Memcache, Filecache, ... 使用每个缓存是相似的,但是设置不同的缓存策略可能会有很大的不同。使用工厂方法时,您可以更轻松地在不同的缓存策略之间切换,最多只需更改一行代码工厂(“Memcache”,选项),而不必担心特定后端的复杂性;

【讨论】:

【参考方案3】:

你可以减少依赖(如果它在你的语言中很重要的话)。

也就是说,您可以使您的客户端免受大量 #includes、编译时间和依赖项的影响。

【讨论】:

【参考方案4】:

当您有一组对象并且只应创建特定组中的对象时,工厂模式很有用。类似的东西:

abstract UI factory:
   create_window()
   create_button()
   ...

Windows UI factory:
   create_window()
   create_button()
   ...

...

在这种情况下,您可以一次实例化您的工厂并使用它,而不是在您的代码中使用大量 ifs。

【讨论】:

以上是关于工厂模式有啥好处? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式,简单工厂模式,抽象工厂模式三者有啥区别

工厂模式和策略模式有啥区别?

工厂设计模式和DAO设计模式有啥区别

服务定位器模式与抽象工厂模式有啥不同吗?

面向编程对象的好处及应用简单工厂模式(1-3)

设计模式之工厂模式