[JAVA] Einführung in Entwurfsmuster (Strategie)

Dieser Artikel fasst die Strategie zusammen. Laut Wikipedia "wird es möglich sein, den Algorithmus auf verschiedene Arten zu ändern, während er vom Benutzer unabhängig ist." Referenz: Strategiemuster

** Hauptcharaktere **

NO Name Rolle
1 Kontext Instanziieren Sie eine Strategie
2 Strategie Algorithmusschnittstelle
3 Konkrete Strategieklasse Implementierung des Algorithmus

Es wird gesagt, dass der Algorithmus unabhängig vom Benutzer ist, aber die Verarbeitungsgruppen, die ersetzt werden können, werden von der Schnittstelle ausgeblendet und detailliert zusammengefasst. Lokalisieren Sie den Einflussbereich, indem Sie ihn bei Bedarf ersetzen.

** Implementiere das Muster ** Es wird vorausgesetzt, dass das automatische Ticket-Gate am Bahnhof verwendet wird. Das Strategiemuster implementiert den Vorgang des Durchlaufens von drei Arten von Ticketschaltern: "kontaktlose IC-Karten-Ticketschalter (Suica, ICOCA usw.)", "Transfer-Ticketschalter" und "Ticket-Ticketschalter".

** Strategie **

Strategy.java


interface Strategy {
  void pass();
}

** Konkrete Strategieklasse **

ConcreteNonContactTurnstile.java


class ConcreteNonContactTurnstile implements Strategy {
  public void pass() {
    System.out.println("Set And Touch!");
  }
}

ConcreteTicketTurnstile.java


class ConcreteTicketTurnstile implements Strategy {
  public void pass() {
    System.out.println("Ticket accept");
  }
}

ConcreteTransferTurnstile.java


class ConcreteTransferTurnstile implements Strategy  {
  public void pass() {
     System.out.println("Transfer Line!");
  }
}

Kontext

ContextStation.java


class ContextStation {
  Strategy strategy;

  public ContextStation(Strategy strategy) {
    this.strategy = strategy;
  }

  public void pass() {
    strategy.pass();
  }
}

** Ausführungsklasse **

Main.java


class Main {
  public static void main(String[] args) {
    ContextStation contextStation;
    contextStation = new ContextStation(new ConcreteNonContactTurnstile());
    contextStation.pass();
  }
}

Ergebnis


Set And Touch!

Wie oben erwähnt, abstrahieren wir ähnliche Verarbeitungsgruppen, indem wir eine Schnittstelle implementieren. Wir instanziieren die folgenden Klassen in der Strategie über eine Klasse in der Rolle des Kontexts, die einen Verweis auf diese Schnittstelle enthält. Zum Zeitpunkt der Implementierung besteht der Zweck dieses Musters darin, den Verarbeitungsinhalt mit hoher Geschwindigkeit zu ändern, indem der XX-Teil der Hauptklasse "Neue Kontextstation (neuer Beton XX)" ersetzt wird. Wenn Sie einen neuen Typ von Ticket-Gate "bemanntes Ticket-Gate" hinzufügen möchten, können Sie ihn implementieren, indem Sie eine konkrete Klasse einer neuen Strategie hinzufügen und den Teil des oben genannten Musters ersetzen.

Recommended Posts

Einführung in Entwurfsmuster (Strategie)
Einführung in Entwurfsmuster (Einführung)
Einführung in Designmuster (Fliegengewicht)
Einführung in Entwurfsmuster Prototyp
Einführung in Entwurfsmuster (Iterator)
Einführung in Entwurfsmuster (Factory-Methode)
Einführung in Design Patterns (Abstract Factory)
Wichtiges Entwurfsmuster zur Verbesserung der Wartbarkeit
Einführung in Ruby 2
Verschiedene Designmuster
Entwurfsmuster ~ Strategie ~
Java-Entwurfsmuster
Einführung in web3j
[Java] Einführung in Java
Einführung in die Migration
Einführung in Doma
Einführung in JAR-Dateien
Einführung in die Bitarithmetik
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in PlayFramework 2.7 ① Übersicht
Einführung in die praktische Programmierung
Einführung in den Befehl javadoc
Einführung in den Befehl jar
Einführung in Ratpack (2) -Architektur
Einführung in den Lambda-Stil
Einführung in den Java-Befehl
Einführung in die Keycloak-Entwicklung
Studieren Sie GoF-Entwurfsmuster
Einführung in den Befehl javac
Einführung in die Android App-Entwicklung
Einführung in Ratpack (5) --Json & Registry
Einführung in Metabase ~ Umgebungskonstruktion ~
Einführung in Ratpack (7) - Guice & Spring
(Punktinstallation) Einführung in Java8_Impression
Einführung in Micronaut 2 ~ Unit Test ~
Einführung in JUnit (Studiennotiz)
Einführung in Spring Boot ~ ~ DI ~
[Java] Einführung in den Lambda-Ausdruck
Einführung in Spring Boot ② ~ AOP ~
Einführung in Apache Beam (2) ~ ParDo ~
Einführung in die EHRbase 2-REST-API
[Java] Einführung in die Stream-API
Einführung in Spring Boot Teil 1
Einführung in Ratpack (1) - Was ist Ratpack?
Warum Designmuster benötigt werden
[Java] Zusammenfassung der Entwurfsmuster
[Einführung in Janken (ähnliche) Spiele] Java
Entwerfen Sie ein Muster, um es mit dem Swift-Iterator-Muster zu versuchen, das Array und Dictionary unterstützt
Entwerfen Sie Muster für häufig verwendete Java-Bibliotheken - Fabrikmuster
Ich las "7 Entwurfsmuster zum Refaktorieren von MVC-Komponenten in Schienen" (Schreiben)
Einführung in Linux Container / Docker (Teil 1)
Einführung in die schnelle Übungsausgabe Kapitel 5