Modèle de stratégie Enum en Java

Lors de la création d'un objet, je pense que le code peut être actualisé si vous utilisez enum au lieu du branchement conditionnel à l'aide de l'instruction if ou de l'instruction switch.

Ce qui suit est un exemple d'implémentation d'Enum qui retourne l'animal correspondant quand un aboiement est entré.

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;
	}

	//Carte qui renverse l'animal de l'écorce
	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);
	}

}

L'appelant ressemble à ceci. Le code est plus propre car il n'y a pas de branches conditionnelles.

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 se produit

Recommended Posts

Modèle de stratégie Enum en Java
[Java] Modèle de stratégie
Reproduire l'énumération Java en C #
Modèle de stratégie
Modèle de stratégie
[Java] enum (type d'énumération)
Partition en Java
modèle de rappel java
Modèle de conception ~ Stratégie ~
Changements dans Java 11
Janken à Java
[Java] Modèle d'adaptateur
Taux circonférentiel à Java
FizzBuzz en Java
Mémo de modèle Java
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
Exemple d'utilisation de Java Enum
Mon modèle DAO (Java)
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Fonctions Azure en Java
Formater XML en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Modèle de générateur (Java effectif)
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Résumé du modèle de conception Java
Implémentez rapidement singleton avec enum en Java
Soustraire les constantes Enum des chaînes et des valeurs en Java
Gérer Enum avec Mybatis TypeHandler
[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
Essayez d'utiliser RocksDB avec Java
Lire des fichiers binaires en Java 1
Évitez l'erreur que Yuma a donnée en Java