工厂模式的优势是什么?

what's the advantage of factory pattern?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What are the practical uses of Factory Method Pattern?
Differences between Abstract Factory Pattern and Factory Method

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

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

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


如果您希望通过共享工厂"协调"创建不同对象(在您的示例鼠标和仓鼠中),则工厂非常有用。这可用于(a)抽象出一个公共超级类(例如示例中的animal)的每个子类的特定构造函数细节,或(b)根据要创建的对象(或animal)类型向构造函数提供默认参数。

它可以用来统一创建共享公共性的对象,例如在缓存中:cachefactory->memcache,filecache,…使用每个缓存是相似的,但是设置不同的缓存策略可能会有很大的不同。使用工厂方法时,您可以更容易地在不同的缓存策略之间切换,最多只需更改一行代码工厂("memcache",选项),而无需担心特定后端的复杂性;


当您需要创建复杂的产品(即"封装"复杂的产品创建过程)、对多个产品具有单个控制点、或需要从单个参考点管理这些产品使用的寿命和/或资源时,最好创建工厂。在某些情况下,用"new"重写产品实例化和处理代码过于复杂,因此工厂方法确保了重用性和一致性,同时最小化潜在的编码错误。

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


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

也就是说,您可以将客户机与繁重的#includes、编译时间和依赖关系隔离开来。


当您有一组对象并且只应创建特定组中的对象时,工厂模式非常有用。有点像:

1
2
3
4
5
6
7
8
9
10
11
abstract UI factory:
   create_window()
   create_button()
   ...

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

...

在这种情况下,您可以实例化工厂并使用它,而不是在代码上使用大量的if