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()的方法可能会更干净
如果两个
类别
生产
产品的方法相似或相同
您可以重新使用工厂。

您确定每个产品和类别的不同类别是正确的选择吗?如果您为这两个类添加代码,这样我们就可以了解我们正在讨论的内容,这会有所帮助。它们是用户界面上的小部件,小部件“类别”包含一个小部件“产品”。他们的代码看起来如何与设计无关,这是我的问题。我质疑的是设计,这就是为什么我要求一些代码。从您的示例来看,您的类别似乎是标记类,也就是说,我看到了空构造函数,我想知道两个类别在功能上有什么不同。如果您说您信任当前的设计,那么就可以了。