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.