[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie

J'ai découvert l'un des modèles de conception, le modèle de stratégie, alors je vais le résumer.

Quel est le modèle de stratégie?

Qu'est-ce que le modèle de stratégie? [Modèle de conception] du GoF (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 C'est l'un des% A7% E3% 82% A2)).

Stratégie signifie ** «stratégie» **, Le modèle de stratégie est un modèle de conception pour ** changer le comportement d'un objet en fonction de la situation **.

Avantages du modèle de stratégie

En fait utiliser

Cette fois, je prendrai Pikachu de Pokemon comme exemple et changerai la technique (stratégie, comportement) en fonction de la situation.

Le modèle de stratégie exige que chaque stratégie ait une ** interface commune **.

Préparez l'interface AtackStrategy ci-dessous.

AttackStrategy.java


/**
*Interface d'attaque
*/
public interface AttackStrategy {
    public void attack();
}

Ensuite, préparez une classe qui implémente l'interface ci-dessus pour chaque stratégie.

Remplacez la méthode décrite dans l'interface et décrivez le traitement réel.

Cette fois, seule la sortie standard est utilisée, mais il est possible de décrire un traitement plus compliqué.

ToGoodTypeConcreteStrategy.java


/**
*Stratégie lorsque l'ennemi est un bon attribut
*/
public class ToGoodTypeConcreteStrategy implements AttackStrategy {

    @Override
    public void attack() {
        System.out.println("100 000 volts!");
    }
}

ToBadTypeConcreteStrategy.java


/**
*Stratégie lorsque l'ennemi n'est pas bon dans ce domaine
*/
public class ToBadTypeConcreteStrategy implements AttackStrategy {

    @Override
    public void attack() {
        System.out.println("C'est un alter ego de l'ombre!");
    }
}

Ensuite, préparez une classe Pikachu qui a la variable _attackStrategy de l'interface AttackStrategy préparée ci-dessus comme champ.

La classe Pikachu définit un constructeur et un setter pour initialiser _attackStrategy.

Aussi, définissez ʻattack () pour appeler ʻAttackStrategy # attack (). (transfert)

C'est le point du modèle de stratégie, et même si seul ʻattack () `est défini dans la classe PikachuContex, le contenu du traitement réel peut être changé en fonction de la situation.

PikachuContext.java


public class PikachuContext {
    private AttackStrategy _attackStrategy;

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

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

C'est tout pour la préparation. Je vais vraiment l'utiliser.

Main.java


public class Main {

    public static void main(String[] args) {

        PikachuContext pikachu;

        //Quand l'ennemi est un bon attribut
        pikachu= new PikachuContext(new ToGoodTypeConcreteStrategy());
        pikachu.attack(); // "100 000 volts!"Est sortie

        //Si l'ennemi n'est pas doué pour ça
        pikachu = new PikachuContext(new ToBadTypeConcreteStrategy());
        pikachu.attack(); // "C'est un alter ego de l'ombre!"Est sortie
    }
}

Recommended Posts

[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
Mémo: [Java] Traiter le csv lu (extraire et modifier selon les conditions) et sortir
Remplacer par une valeur selon la correspondance avec une expression régulière Java
[Java] Modèle de stratégie
Changer de siège avec Java
Comment changer l'action avec plusieurs boutons d'envoi
Connexion HTTPS avec Java au serveur de certificats auto-signé
Java pour jouer avec Function
Changer de port avec SpringBoot
Shell pour tuer les processus Java
Modèle de stratégie Enum en Java
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
[Java] Traitement de la situation où le programme qui écrit dans le flux de sortie du processus ne se termine pas même si waitFor
Assurez-vous de comparer le résultat Java compareTo avec 0
Entrée dans la console Java
Revenir au début, démarrer avec Java ② Instructions de contrôle, instructions de boucle
Je veux revenir à l'écran précédent avec kotlin et java!
[Rails] Comment introduire le kaminari avec Slim et changer le design
Si vous souhaitez modifier l'environnement de développement Java d'Eclipse
Connexion à une base de données avec Java (partie 1) Peut-être la méthode de base
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine
Traitez le mouvement détecté par le capteur humain HC-SR501 avec Raspberry Pi 3 et Java
[Java] Je veux effectuer distinctement avec la clé dans l'objet
Java pour apprendre avec les ramen [Partie 1]
[java8] Pour comprendre l'API Stream
[Java] Points à noter avec Arrays.asList ()
Osez défier Kaggle avec Java (1)
[Java] Entrez dans le stdin du processus
J'ai essayé d'interagir avec Java
Suivez le lien avec Selenium (Java)
Bienvenue dans le marais des bibliothèques Java! !!
La route de JavaScript à Java
Java, des tableaux pour débuter avec les débutants
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
[swift5] Comment changer la couleur de TabBar ou la couleur de l'élément de TabBar avec le code
J'ai créé un programme qui recherche la classe cible à partir du processus surchargé avec Java
[Java] Comment utiliser la classe File
Comment compiler Java avec VsCode & Ant
Référence Java à comprendre dans la figure
Introduction à Java pour la première fois # 2
[Java] Résumez comment comparer avec la méthode equals
Java SE8 Silver ~ La route à franchir ~
À propos de la procédure pour que Java fonctionne
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
[Java] Comment utiliser la méthode toString ()
Etudier comment utiliser le constructeur (java)
[Traitement × Java] Comment utiliser la boucle
Changer la disposition lors de la rotation avec onConfigurationChanged
Remplacez List <Optional <T >> par Optional <List <T >> en Java
[Java] Comment régler la date sur 00:00:00
[Java] Comment obtenir le répertoire actuel
J'ai essayé d'implémenter le modèle Iterator
[Traitement × Java] Comment utiliser la classe