Enum Strategiemuster in Java

Ich denke, dass beim Erstellen eines Objekts der Code aktualisiert werden kann, wenn Sie enum anstelle der bedingten Verzweigung mit if-Anweisung oder switch-Anweisung verwenden.

Das Folgende ist ein Implementierungsbeispiel für Enum, das das entsprechende Tier zurückgibt, wenn eine Rinde eingegeben wird.

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

	//Karte, die Tier von der Rinde umkehrt
	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);
	}

}

Der Anrufer sieht so aus. Es gibt keine bedingte Verzweigung, daher ist der Code sauberer.

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 tritt auf

Recommended Posts

Enum Strategiemuster in Java
[Java] Strategiemuster
Reproduzieren Sie die Java-Enumeration in C #
Strategiemuster
Strategiemuster
[Java] enum (Aufzählungstyp)
Partisierung in Java
Java-Rückrufmuster
Entwurfsmuster ~ Strategie ~
Änderungen in Java 11
Janken in Java
[Java] Adaptermuster
Umfangsrate in Java
FizzBuzz in Java
Java-Muster-Memo
Lesen Sie JSON in Java
Interpreter-Implementierung durch Java
Machen Sie einen Blackjack mit Java
Janken App in Java
Anwendungsbeispiel für Java Enum
Mein DAO-Muster (Java)
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
Azure funktioniert in Java
Formatieren Sie XML in Java
Boyer-Moore-Implementierung in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
Befehle in Java ausführen (Ping)
Verschiedene Threads in Java
Implementierung der Heap-Sortierung (in Java)
Zabbix API in Java
ASCII-Kunst in Java
Listen in Java vergleichen
POST JSON in Java
Fehler in Java ausdrücken
Erstellen Sie JSON in Java
Datumsmanipulation in Java 8
Was ist neu in Java 8?
Builder-Muster (effektives Java)
Verwenden Sie PreparedStatement in Java
Was ist neu in Java 9,10,11
Parallele Ausführung in Java
Zusammenfassung des Java-Entwurfsmusters
Implementieren Sie Singleton mit Enum schnell in Java
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
Behandeln Sie Enum mit Mybatis TypeHandler
[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
Versuchen Sie es mit RocksDB mit Java
Lesen Sie Binärdateien in Java 1
Vermeiden Sie den Fehler, den Yuma in Java gemacht hat