这是创建工厂类的更好方法

0 java design-patterns

我创建了工厂类,我想知道哪种方法更好.选项1

public class Factory {

    private IProperty prop;
    public IDoc doc;

    public Factory(int version) {
        switch (version) {
            case '1':   
                prop = new Prop();
                doc = new Docu();
        ...
            case '2':
            prop = new Prop1();
            doc = new Docu1();
        ...
        }
    }

    public IProperty getProperty() {
        return this.prop;
    }

    public IDoc getDoc() {
        return this.doc;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果这样做,即定义成员与接口类型,并打开构造函数或每个get方法,而不是在构造函数上使用switch语句,所以在构造函数中,我将获取版本并保存它在类成员上,比如使用像

public IProperty getProperty() {
switch (version) {
  case '1':
    prop = new Prop();
  case '2':
    prop = new Prop1();
...
Run Code Online (Sandbox Code Playgroud)

那么更好的方式或任何其他想法是什么?

bob*_*bah 5

最干净的方法是将你所做的工作暴露为两个独立的工厂,如果他们有什么可以共享的话,给他们一个共同的抽象基础或可重用的政策论据.一种工厂类型应该只创建一种特定对象(比如说只有塑料工具).工厂公共配置通常仅包含创建对象(供应商的联系人,专利)或正在创建的对象的静态属性(例如塑料的类型)所需的属性,而不包含对象的类型/类.

另外,像你的例子#1那样存储长寿命对象的东西应该被称为"上下文",而不是"工厂".

代码示例如下.

public interface IFactory {
  IDoc createDoc();
  IProp createProp();
}

public class Type1Factory implements IFactory {
  @Override public IDoc createDoc() { return new Doc1(); }
  @Override public IProp createProp() { return new Prop1(); }
}
Run Code Online (Sandbox Code Playgroud)