【问题标题】:Apply Factory Pattern in two levels在两个级别应用工厂模式
【发布时间】:2013-08-15 14:31:54
【问题描述】:

我想问在这种情况下是否推荐使用(抽象)Factory Pattern:我有 20 个Products,所有这些都由派生自超类BaseProduct 的单独类表示。 Products 分为 5 个Categories,每个都由一个派生自超类BaseCategory 的单独类表示。每个Product 都属于一个特定的CategoryProduct 的创建仅在其Category 中有意义且技术上执行,因此相应的Category 必须在Product 的实例化之前实例化。但是,如果没有 ProductCategory 不能在应用程序中“独立”。通过检查String 来确定要创建的ProductCategory 的选择。为避免客户端中出现大量 if-else 代码,我更喜欢使用 Factory Pattern 来创建类别:

    class CategoryFactory{

       static Category createCategory(String s){

        if(s.equals("foo"))
            return new Category1();
        else if (s.equals("bar"))
            return new Category2();
        ...

         }
        }

我担心的是如何在每个 Category 中创建 Products。我是否应该在Category 类的构造函数中传递String 并在类别中应用类似的Factory?我应该将Factory 用于Products 并将其作为Category 的构造函数中的参数提供吗?有没有更好的方法来解决整个问题?请记住,在创建 Category 后,我无法创建 Product。当我在客户端中创建Category 时,它必须同时创建并包含它的Product

【问题讨论】:

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

标签: java oop design-patterns factory-pattern


【解决方案1】:

你可以这样做。如果 2 Categories 具有相似或相同的方式来生成 Products,那么至少让 Category 有一个名为 getProductFactory() 之类的方法可能会更干净,您可以重复使用工厂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多