ファクトリを実装する方法はたくさんあります。それは、作成がどれほど複雑で、エンティティのリストをどのように修正したかによって異なります。
列挙型の方法:
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フレームワークがそれを処理できるかどうかを確認することです。そうでない場合:
- 単純な作成/固定エンティティセット-列挙型またはマップ/リフレクション
- 単純な作成/エンティティセットがグループ化されることを期待します-マップ/リフレクション
- 複雑な作成-マップ/戦略。