列挙型を使ったFactory Method パターン。列挙型はとても使い勝手があるんだけど、これはその好例じゃないでしょうか。実は自分でも似たようなことをやろうと思って検索したら、すでにパターンとして名前が付いていた。みんな考えることは同じかあ。Strategy パターンとの組み合わせで、かなり使えると思います。
使いまわせるようなユーティリティ型のインスタンス生成なら、列挙する際にやっちゃっても良いかもしれない。
public enum Distribution { NORMAL("Normal", new NormalGenerator()); private String name; private DistributedGenerator generator; private Distribution(String name, DistributedGenerator generator) { this.name = name; this.generator = generator; } public DistributedGenerator getGenerator() { return this.generator; }
ここでは、列挙ごと(NORMAL)に生成される generator がシングルトン扱いになるので、逆にそういったニーズに対しては有効なアプローチになるのでは。一般的な Strategy パターンの実装なら、例のページに掲載されているやり方の方が間違いがなくて良いと思うけど。