Java 在两个级别中应用Factory模式
我想问,在这种情况下,是否建议使用(抽象)Java 在两个级别中应用Factory模式,java,oop,design-patterns,factory-pattern,Java,Oop,Design Patterns,Factory Pattern,我想问,在这种情况下,是否建议使用(抽象)工厂模式:我有20个产品,所有这些产品都由一个单独的类表示,该类派生自一个超类基本产品。产品分为5个类别,每个类别还由一个独立的类表示,该类派生自一个超类基本类别。每个产品都属于一个特定的类别。产品的创建仅在其类别中执行,因此必须在产品实例化之前实例化相应的类别。但是,类别不能在没有产品的应用程序中“独立”。要创建的产品以及类别的选择通过选中字符串来确定。为了避免客户机中出现大量if-else代码,我更喜欢使用工厂模式来创建类别: class C
工厂模式
:我有20个产品
,所有这些产品都由一个单独的类表示,该类派生自一个超类基本产品
。产品
分为5个类别
,每个类别还由一个独立的类表示,该类派生自一个超类基本类别
。每个产品
都属于一个特定的类别
。产品
的创建仅在其类别
中执行,因此必须在产品
实例化之前实例化相应的类别
。但是,类别
不能在没有产品的应用程序中“独立”。要创建的产品
以及类别
的选择通过选中字符串
来确定。为了避免客户机中出现大量if-else
代码,我更喜欢使用工厂模式来创建类别:
class CategoryFactory{
static Category createCategory(String s){
if(s.equals("foo"))
return new Category1();
else if (s.equals("bar"))
return new Category2();
...
}
}
我担心的是如何在每个类别中创建产品
。我是否应该在类别的构造函数中传递字符串
,并在类别中应用类似的工厂
?我是否应该将工厂
用于产品
,并将其作为类别
的构造函数中的参数提供?对于整个问题有更好的解决方法吗?请记住,在创建了类别
之后,我无法创建产品
。当我在客户端安装类别
时,它必须同时创建和包含其产品
你可以这样做。拥有Category
和一个名为getProductFactory()的方法可能会更干净
如果两个类别
生产产品的方法相似或相同
您可以重新使用工厂。您确定每个产品和类别的不同类别是正确的选择吗?如果您为这两个类添加代码,这样我们就可以了解我们正在讨论的内容,这会有所帮助。它们是用户界面上的小部件,小部件“类别”包含一个小部件“产品”。他们的代码看起来如何与设计无关,这是我的问题。我质疑的是设计,这就是为什么我要求一些代码。从您的示例来看,您的类别似乎是标记类,也就是说,我看到了空构造函数,我想知道两个类别在功能上有什么不同。如果您说您信任当前的设计,那么就可以了。