工厂模式的优势是什么?

时间:2012-02-04 13:20:15

标签: design-patterns

  

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

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

也就是说,您可以将客户与大量#includes,编译时间和依赖关系混为一谈。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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

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

...

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