M S*_*ach 7 java design-patterns
很多人说他们在项目中使用工厂模式.但是,当我真正看到它们的实现时,它看起来与我在第一本书中读到的内容完全不同.在书中他们描述了两种工厂模式即
工厂方法: - 类指定其子类,以根据某些参数指定要创建的对象.所以我们期望这里有一些基类的抽象方法,这些方法将由子类实现,并且将会创建一些对象
抽象工厂: - 提供工厂(以接口或抽象工厂的形式),用于创建相关或依赖对象的族,而无需指定其具体类.
我在这里有一个问题,它们是指依赖或相关对象系列的含义.让我们参考http://www.apwebco.com/gofpatterns/creational/AbstractFactory.html.根据我的理解,它意味着FinancialToolsFactory(在链接中)能够创建TaxProcessor 哪个是一系列产品,其中实际的concreate产品是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;
}
}
Run Code Online (Sandbox Code Playgroud)
它们只是从main方法传递类似Example.class的类,并获取该特定类的对象实例.现在,如果我们按照开头(从第一本书)和其他网站描述的工厂模式的实际概念,它不遵循两种工厂模式中的任何一种.对我来说,它看起来像一个实用程序类,我们传递类并获取对象实例.如果你们同意这个,请告诉我?
您对Factory Method和Abstract Factory模式的理解是正确的.
当人们创建其职责仅仅是创建其他对象的类时,他们自然倾向于将它们命名为Factory.这本身并非不合理.问题是没有工厂模式.
出现混乱有两个原因:
一些开发人员只想引入另一种模式并声称他们正在使用"工厂模式",指的是创建其他模式的对象
了解设计模式的开发人员会看到一个类被称为工厂,无论是否实现了模式,并假设它必须是工厂方法或抽象工厂.这是令人困惑的,因为你正在试图找出它是哪一个,质疑你自己对真实模式的理解.
请记住,不仅设计模式解决了常见问题,而且它们用于建立讨论设计的语言.在这种情况下,您期望的设计语言不是开发人员实际使用的语言.如果他们说他们正在使用特定的设计模式,他们所做的只是错误的.