Java允许我们在Enum上嵌入数据和行为.
我不想在Enum上直接实施一个工厂,因为我认为这不是它的作用.
但是我可以把类的引用放在枚举上,并在外部工厂中引用对象.相对于传统的工厂模式,你最好的实现是什么?哪种解决方案在哪种情况下更好?
现在,代码.
在两种解决方案中使用的函数来构造对象.如果需要,可以使用Map来实现fly-weight模式.
private Action getAction(Class extends Action> actionClazz) {
// logger + error handling
return actionClazz.newInstance();
}
1)有传统工厂:
public enum ActionEnum {
LOAD_DATA,
LOAD_CONFIG;
}
public Action getAction(ActionEnum action) {
switch (action) {
case LOAD_CONFIG:
return getAction(ActionLoadConfig.class);
case LOAD_DATA:
return getAction(ActionLoadData.class);
}
}
2)具有Enum风格的工厂:
public enum ActionEnum {
LOAD_DATA(ActionLoadConfig.class),
LOAD_CONFIG(ActionLoadData.class);
public ActionEnum(Class extends Action> clazz){...}
public getClazz() {return this.clazz}
}
public Action getAction(ActionEnum action) {
return getAction(action.getClazz());
}