[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster

Ich habe eines der Entwurfsmuster kennengelernt, das Strategiemuster, und werde es daher zusammenfassen.

Was ist das Strategiemuster?

Was ist das Strategiemuster? GoFs [Entwurfsmuster](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3_ (% E3% 82% BD% E3% 83% 95% E3% 83% 88% E3% 82% A6% E3% 82 Es ist eines von% A7% E3% 82% A2)).

Strategie steht für ** "Strategie" **, Das Strategiemuster ist ein Entwurfsmuster zum ** Ändern des Verhaltens eines Objekts entsprechend der Situation **.

Vorteile des Strategiemusters

Eigentlich verwenden

Dieses Mal werde ich Pikachu von Pokemon als Beispiel nehmen und die Technik (Strategie, Verhalten) entsprechend der Situation ändern.

Das Strategiemuster erfordert, dass jede Strategie eine ** gemeinsame Schnittstelle ** hat.

Bereiten Sie die folgende AtackStrategy-Oberfläche vor.

AttackStrategy.java


/**
*Angriffsschnittstelle
*/
public interface AttackStrategy {
    public void attack();
}

Bereiten Sie dann eine Klasse vor, die die obige Schnittstelle für jede Strategie implementiert.

Überschreiben Sie die in der Schnittstelle beschriebene Methode und beschreiben Sie die tatsächliche Verarbeitung.

Dieses Mal wird nur die Standardausgabe verwendet, es ist jedoch möglich, eine kompliziertere Verarbeitung zu beschreiben.

ToGoodTypeConcreteStrategy.java


/**
*Strategie, wenn der Feind ein gutes Attribut ist
*/
public class ToGoodTypeConcreteStrategy implements AttackStrategy {

    @Override
    public void attack() {
        System.out.println("100.000 Volt!");
    }
}

ToBadTypeConcreteStrategy.java


/**
*Strategie, wenn der Feind nicht gut ist
*/
public class ToBadTypeConcreteStrategy implements AttackStrategy {

    @Override
    public void attack() {
        System.out.println("Es ist ein Schatten Alter Ego!");
    }
}

Bereiten Sie als Nächstes eine Pikachu-Klasse vor, die die Variable "_attackStrategy" der oben vorbereiteten AttackStrategy-Schnittstelle als Feld enthält.

Die Pikachu-Klasse definiert einen Konstruktor und einen Setter zum Initialisieren von _attackStrategy.

Definieren Sie außerdem "attack ()", um "AttackStrategy # attack ()" aufzurufen. (Transfer)

Dies ist der Punkt des Strategiemusters, und obwohl in der PikachuContex-Klasse nur "attack ()" definiert ist, kann der tatsächliche Verarbeitungsinhalt je nach Situation geändert werden.

PikachuContext.java


public class PikachuContext {
    private AttackStrategy _attackStrategy;

    public Pikachu(AttackStrategy strategy) {
        setStrategy(strategy);
    }

    public void attack() {
        _attackStrategy.attack();
    }
}

Das ist alles zur Vorbereitung. Ich werde es tatsächlich benutzen.

Main.java


public class Main {

    public static void main(String[] args) {

        PikachuContext pikachu;

        //Wenn der Feind ein gutes Attribut ist
        pikachu= new PikachuContext(new ToGoodTypeConcreteStrategy());
        pikachu.attack(); // "100.000 Volt!"Wird ausgegeben

        //Wenn der Feind nicht gut darin ist
        pikachu = new PikachuContext(new ToBadTypeConcreteStrategy());
        pikachu.attack(); // "Es ist ein Schatten Alter Ego!"Wird ausgegeben
    }
}

Recommended Posts

[Java] Ändern Sie die Verarbeitung entsprechend der Situation mit dem Strategiemuster
Anmerkung: [Java] Verarbeiten Sie die gelesene CSV (extrahieren und ändern Sie sie gemäß den Bedingungen) und geben Sie sie aus
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
[Java] Strategiemuster
Wechseln Sie die Plätze mit Java
So ändern Sie die Aktion mit mehreren Senden-Schaltflächen
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver
Java zum Spielen mit Function
Ändern Sie den Port mit SpringBoot
Shell zum Beenden von Java-Prozessen
Enum Strategiemuster in Java
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
[Java] Umgang mit der Situation, in der das Programm, das in den Output Stream of Process schreibt, nicht endet, selbst wenn waitFor
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
Eingabe in die Java-Konsole
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
[Rails] Wie man Kaminari mit Slim einführt und das Design ändert
Wenn Sie die Java-Entwicklungsumgebung von Eclipse aus ändern möchten
Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fabrikmuster
Verarbeiten Sie die vom menschlichen Sensor HC-SR501 erkannte Bewegung mit Raspberry Pi 3 & Java
[Java] Ich möchte mit dem Schlüssel im Objekt eindeutig arbeiten
Java mit Ramen lernen [Teil 1]
[java8] Um die Stream-API zu verstehen
[Java] Mit Arrays.asList () zu beachtende Punkte
Wagen Sie es, Kaggle mit Java herauszufordern (1)
[Java] Geben Sie in stdin of Process ein
Ich habe versucht, mit Java zu interagieren
Folgen Sie dem Link mit Selen (Java)
Willkommen im Sumpf der Java-Bibliotheken! !!
Der Weg von JavaScript nach Java
Java, Arrays für Anfänger
Eine Geschichte, die ich mit der Stream-API von Java8 einem Prozess schreiben wollte, der einer while-Anweisung entspricht
[swift5] So ändern Sie die Farbe der TabBar oder die Farbe des TabBar-Elements mit Code
Ich habe ein Programm erstellt, das aus dem mit Java überladenen Prozess nach der Zielklasse sucht
[Java] Verwendung der File-Klasse
So kompilieren Sie Java mit VsCode & Ant
Java-Referenz zum Verständnis in der Abbildung
Einführung in Java zum ersten Mal # 2
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Java SE8 Silber ~ Der Weg zum Pass ~
Über das Verfahren, damit Java funktioniert
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
[Java] Verwendung der toString () -Methode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
Ändern Sie das Layout beim Drehen mit onConfigurationChanged
Ändern Sie die Liste <Optional <T >> in Java in Optional <Liste <T >>
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
[Java] So erhalten Sie das aktuelle Verzeichnis
Ich habe versucht, das Iterator-Muster zu implementieren
[Verarbeitung × Java] Verwendung der Klasse