很多人说他们在项目中使用工厂模式。但是当我实际看到他们的实现时,与我在《Head First》书籍中阅读的定义完全不同。在书中,他们描述了两种工厂模式,即:
- 工厂方法:一个类指定其子类来指定基于某些参数创建哪些对象。因此,我们期望在基类中有一些抽象方法,由子类实现,目的是创建一些对象。 - 抽象工厂:提供一个工厂(以接口或抽象工厂的形式)来创建相关联或依赖的对象系列,而不指定它们的具体类。
我这里有一个问题,就是“相关或依赖对象系列”是什么意思。让我们参考http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html。据我理解,这意味着在该链接中的
如果以上理解是正确的,那么请告诉我,因为我认为这是工厂模式的精髓。
第二个问题:
人们在工厂模式的名义下所做的是:
他们只是从主方法传递类,例如Example.class,并获取该特定类的对象实例。 现在,如果我们按照工厂模式的实际概念来看,这并不遵循头部第一本书和其他网站描述的任何两种工厂模式。对我来说,它看起来像一个实用程序类,在那里我们传递类并获取对象实例。请告诉我你们是否同意这一点?
- 工厂方法:一个类指定其子类来指定基于某些参数创建哪些对象。因此,我们期望在基类中有一些抽象方法,由子类实现,目的是创建一些对象。 - 抽象工厂:提供一个工厂(以接口或抽象工厂的形式)来创建相关联或依赖的对象系列,而不指定它们的具体类。
我这里有一个问题,就是“相关或依赖对象系列”是什么意思。让我们参考http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html。据我理解,这意味着在该链接中的
FinancialToolsFactory
能够创建TaxProcessor
,它是产品系列,其实际具体产品是CanadaTaxProcessor
和EuropeTaxProcessor
。因此,在这里,我们将拥有n
个具体工厂(在这种情况下为CanadaFinancialToolsFactory
和EuropeFinancialToolsFactory
),它们将扩展/实现此抽象工厂,即FinancialToolsFactory
。如果以上理解是正确的,那么请告诉我,因为我认为这是工厂模式的精髓。
第二个问题:
人们在工厂模式的名义下所做的是:
public class MyFactory
{
public static <T> T getObject(Class<T> cls)
{
if (cls == null)
{
throw new IllegalArgumentException("Invalid className");
}
T daoObject = (T)map.get(cls);
if (daoObject == null)
{
daoObject = loadObject(cls);
}
return daoObject;
}
}
他们只是从主方法传递类,例如Example.class,并获取该特定类的对象实例。 现在,如果我们按照工厂模式的实际概念来看,这并不遵循头部第一本书和其他网站描述的任何两种工厂模式。对我来说,它看起来像一个实用程序类,在那里我们传递类并获取对象实例。请告诉我你们是否同意这一点?