[JAVA] Introduction aux modèles de conception (stratégie)

Cet article résume la stratégie. Selon wikipedia, «Il sera possible de changer l'algorithme de différentes manières tout en étant indépendant de l'utilisateur». Référence: modèle de stratégie

** Personnages principaux **

NO Nom rôle
1 le contexte Instancier une stratégie
2 Stratégie Interface d'algorithme
3 Classe concrète de stratégie Implémentation d'algorithme

On dit que l'algorithme est indépendant de l'utilisateur, mais les groupes de traitement qui peuvent être remplacés sont masqués par l'interface et résumés en détail. Localisez la plage d'influence en la remplaçant si nécessaire.

** Implémentez le modèle ** Il sera mis en œuvre en supposant que la porte automatique des billets sera utilisée à la gare. Le modèle de stratégie implémente l'acte de passer par trois types de portes de ticket: "portes de ticket de carte IC sans contact (Suica, ICOCA, etc.)", "portes de ticket de transfert" et "porte de ticket".

** Stratégie **

Strategy.java


interface Strategy {
  void pass();
}

** Classe concrète de stratégie **

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!");
  }
}

le contexte

ContextStation.java


class ContextStation {
  Strategy strategy;

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

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

** Classe d'exécution **

Main.java


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

résultat


Set And Touch!

Comme mentionné ci-dessus, nous abstenons des groupes de traitement similaires en implémentant une interface. Nous instancions les classes suivantes dans la stratégie via une classe dans le rôle de contexte qui contient une référence à cette interface. Au moment de l'implémentation, le but de ce pattern est de changer le contenu de traitement à grande vitesse en remplaçant la partie XX de la classe principale "new Context Station (new Concrete XX)". Si vous souhaitez ajouter un nouveau type de porte de ticket "porte de ticket habitée", vous pouvez l'implémenter en ajoutant une classe concrète d'une nouvelle stratégie et en remplaçant la partie de modèle mentionnée ci-dessus.

Recommended Posts

Introduction aux modèles de conception (stratégie)
Introduction aux modèles de conception (introduction)
Introduction aux modèles de conception (poids mouche)
Introduction au prototype de modèles de conception
Introduction aux modèles de conception (Iterator)
Introduction aux modèles de conception (méthode d'usine)
Introduction aux modèles de conception (Abstract Factory)
Modèle de conception important pour améliorer la maintenabilité
Introduction à Ruby 2
Divers modèles de conception
Modèle de conception ~ Stratégie ~
Modèles de conception Java
Introduction à web3j
[Java] Introduction à Java
Introduction à la migration
Introduction à Doma
Introduction aux fichiers JAR
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
Introduction à la programmation pratique
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
Introduction au style lambda
Introduction à la commande java
Introduction au développement de Keycloak
Étudier les modèles de conception du GoF
Introduction à la commande javac
Introduction au développement d'applications Android
Introduction à Ratpack (5) --Json & Registry
Introduction à la métabase ~ Construction de l'environnement ~
Introduction à Ratpack (7) --Guice & Spring
(Installation par points) Introduction à Java8_Impression
Introduction à Micronaut 2 ~ Test unitaire ~
Introduction à JUnit (note d'étude)
Introduction à Spring Boot ① ~ DI ~
[Java] Introduction à l'expression lambda
Introduction à Spring Boot ② ~ AOP ~
Introduction à Apache Beam (2) ~ ParDo ~
Introduction à l'API EHRbase 2-REST
[Java] Introduction à l'API Stream
Introduction à Spring Boot, partie 1
Introduction à Ratpack (1) - Qu'est-ce que Ratpack?
Pourquoi vous avez besoin d'un modèle de conception
[Java] Résumé des modèles de conception
[Introduction aux jeux Janken (comme)] Java
Modèle de conception à essayer avec le modèle Swift-Iterator qui prend en charge Array et Dictionary
Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine
J'ai lu "7 modèles de conception pour refactoriser les composants MVC dans les rails" (écriture)
Introduction à Linux Container / Docker (Partie 1)
Introduction à la pratique rapide Chapitre 5