Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 什么';工厂模式的优点是什么?_Design Patterns - Fatal编程技术网

Design patterns 什么';工厂模式的优点是什么?

Design patterns 什么';工厂模式的优点是什么?,design-patterns,Design Patterns,可能重复: 我目前对工厂的理解是,它可以通过输入字符串创建对象,比如 Factory.create("mouse"); Factory.create("hamster"); 与新模式相比,这种模式有什么优势?您可以减少依赖性(如果它在您的语言中很重要的话) 也就是说,您可以将客户机与大量的#includes、编译时间和依赖项隔离开来。当您有一组对象并且只应创建特定组中的对象时,Factory模式非常有用。比如: abstract UI factory: create_window()

可能重复:

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

Factory.create("mouse");
Factory.create("hamster");
与新模式相比,这种模式有什么优势?

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


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

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

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

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

...

在这种情况下,如果你的代码上有大量的
,你可以实例化你的工厂并使用它。

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


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

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


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

您将如何使用
new
?另一种可能的dup: