你有很多方法来实现工厂。这取决于创建的复杂程度以及实体列表的固定程度。
枚举方式:
public enum BrowserType {
CHROME {
public Browser create() {
return new ChromeBrowser();
}
},
IE {
public Browser create() {
return new IeBrowser();
}
}
public abstract Browser create();
}
// Factory is optional really, the enum does the job.
public class BrowserFactor {
public Browser create(BrowserType type) {
return type.create();
}
}
地图/策略方式:
interface BrowserStrategy {
Browser create();
}
public class ChromeBrowser implements BrowserStrategy {
public Browser create() {
return new ChromeBrowser();
}
}
public class BrowserFactor {
Map<String, BrowserStrategy> ctorStategy = ...; // I'd use DI, but this could be manually created.
public Browser create(String type) {
return type.create();
}
}
映射/反射方式:
public class BrowserFactor {
Map<String, Class<? extends Browser> clazz = ...; // I'd use DI, but this could be manually created.
public Browser create(String type) {
return clazz.newInstance();
}
}
我的偏好是看看您的 DI 框架是否可以为您处理它。如果不:
- 简单创建/固定实体集 - 枚举或映射/反射
- 简单创建/期望实体集将分组 - 映射/反射
- 复杂的创建 - 地图/策略。