Java を使用すると、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 Class<? extends Action> getClazz() {return this.clazz}
}
public Action getAction(ActionEnum action) {
return getAction(action.getClazz());
}