JavaでEnum Strategy パターン
オブジェクトを生成する際、if文やswitch文を使って条件分岐させるのではなく、enumを使うとコードがスッキリすることがあると思います。
以下、鳴き声を入力すると、それに対応する動物を返すEnumの実装例です。
AnimalCreator.java
public enum AnimalCreator {
CAT("nyaa", Cat::new),
DOG("waon", Dog::new),
BIRD("pii", Bird::new);
private String nakigoe;
private Supplier<Animal> create;
AnimalCreator(String nakigoe, Supplier<Animal> creator) {
this.nakigoe = nakigoe;
this.create = creator;
}
//鳴き声からAnimalを逆引きするMap
private static final Map<String, AnimalCreator> map =
Stream.of(AnimalCreator.values())
.collect(Collectors.toMap(a -> a.nakigoe, a -> a));
//factory method
public static Animal of(String nakigoe) {
return Optional.ofNullable(map.get(nakigoe))
.map(a -> a.create.get())
.orElseThrow(IllegalArgumentException::new);
}
}
呼び出し側はこのようになります。条件分岐がないので、コードがスッキリしました。
main.java
Animal cat = AnimalCreator.of("nyaa");
Animal dog = AnimalCreator.of("waon");
Animal bird = AnimalCreator.of("pii");
Animal mouse = AnimalCreator.of("chu");
// java.lang.IllegalArgumentExceptionが発生
Author And Source
この問題について(JavaでEnum Strategy パターン), 我々は、より多くの情報をここで見つけました https://qiita.com/cohii/items/98ee42a5bdc0527f11b1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .