我创建了工厂类,我想知道哪种方法更好.选项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)
那么更好的方式或任何其他想法是什么?
最干净的方法是将你所做的工作暴露为两个独立的工厂,如果他们有什么可以共享的话,给他们一个共同的抽象基础或可重用的政策论据.一种工厂类型应该只创建一种特定对象(比如说只有塑料工具).工厂公共配置通常仅包含创建对象(供应商的联系人,专利)或正在创建的对象的静态属性(例如塑料的类型)所需的属性,而不包含对象的类型/类.
另外,像你的例子#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)