abstract factory patternを使用できます。
それを拡張する抽象クラスFactory
[またはインタフェース]、およびクラスを作成します。MyObject1Factory
、MyObject2Factory
、...
前処理では、coresponding Factory
インスタンスにString
からMap<String,Factory>
を投入し、これはのみ行われますあなたのアプリケーションで一度。
新しいインスタンスを作成する必要がある場合は、該当するタイプの関連オブジェクトを作成するためにmap.get(string).create()
を呼び出します。
編集:コードで小さな例:
あなたのクラスは、次のとおりです。
public static class MyBase {
@Override
public String toString() {
return "Base";
}
}
public static class Class1 extends MyBase {
@Override
public String toString() {
return "Class1";
}
}
public static class Class2 extends MyBase {
@Override
public String toString() {
return "Class2";
}
}
そして、あなたの工場は次のようになります。
public static abstract class MyFactory {
public abstract MyBase build();
}
public static class MyFactory1 extends MyFactory {
@Override
public Class1 build() {
return new Class1();
}
}
public static class MyFactory2 extends MyFactory {
@Override
public Class2 build() {
return new Class2();
}
}
は一度だけプログラム寿命のマップを移入:
Map<String,MyFactory> map = new HashMap<String, Test.MyFactory>();
map.put("class1", new MyFactory1());
map.put("class2", new MyFactory2());
と、新しいオブジェクトが必要、との呼び出し:
MyBase obj = map.get(s).build();
System.out.println(obj);
(*)注:クラスの静的キーワードを私は内部クラスとしてそれらを作成したので、ここにある - もちろん、あなたはそれならば、それをOMMITする必要がありますあなたのケースではありません....
「情報[0-9]」のような正規表現をマッチャーで使用できますか?しかし、私はより良い方法ではありません。 – Kiwy