可能重复:
What are the practical uses of Factory Method Pattern?
Differences between Abstract Factory Pattern and Factory Method
我目前对工厂的理解是它可以通过输入字符串创建对象,比如说
Factory.create("mouse");
Factory.create("hamster");
这种模式比新模式有什么优势?
答案 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
,您可以实例化您的工厂并使用它。