可能重复:
什么是工厂方法模式的实际用途?
抽象工厂模式和工厂方法之间的区别
这种模式相对于"new"有什么优势?
什么是工厂方法模式的实际用途?
抽象工厂模式和工厂方法之间的区别
我目前对工厂的理解是,它可以通过输入字符串来创建对象,例如:
Factory.create("mouse");
Factory.create("hamster");
这种模式相对于"new"有什么优势?
我目前对工厂的理解是,它可以通过输入字符串来创建对象,例如:
Factory.create("mouse");
Factory.create("hamster");
在需要创建复杂产品(即“封装”复杂产品创建过程)、为多个产品提供单一控制点或需要从单一参考点管理这些产品消耗的生命周期和/或资源时,最好创建一个工厂。在某些情况下,使用“new”重写产品实例化和处理代码太过复杂,因此工厂方法确保了重用和统一性,同时最小化了潜在的编码错误。
例如,在可视化编程IDE中使用工具包来同时打开两个或更多项目时,该工具包及其功能很可能会通过工厂模式进行实例化,因为它在图形和逻辑上都非常复杂,并且需要仔细地管理一个或多个实例。
如果你想通过共享工厂来“协调”不同对象(例如鼠和仓鼠)的创建,那么工厂就非常有用。这可以用于(a)为公共超类(例如你的例子中的动物)的每个子类抽象出特定的构造函数细节,或者(b)根据要创建的对象(或动物)类型提供默认参数给构造函数。
它可以用于统一具有共性的对象的创建,例如在缓存中:CacheFactory->Memcache、Filecache等。虽然每个缓存的使用方式相似,但设置不同的缓存策略可能差异很大。当使用工厂方法时,您可以更轻松地在不同的缓存策略之间切换,最好只需更改一行代码factory("Memcache", options),而无需担心特定后端的复杂性;
工厂模式在您拥有一组对象并且只应创建来自特定组的对象时非常有用。类似于:
abstract UI factory:
create_window()
create_button()
...
Windows UI factory:
create_window()
create_button()
...
...
如果在您的语言中有所影响,您可以减少依赖关系。
也就是说,您可以将客户端与大量繁重的 #includes、编译时间和依赖项隔离开来。
new
来实现这个? - Oliver Charlesworth