Ich habe eines der Entwurfsmuster kennengelernt, das Strategiemuster, und werde es daher zusammenfassen.
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 **.
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