Design pattern:Stratégie
De WIKI.minetti.org
Sommaire
But
Permettre la sélection à la volée d'un algorithme selon certaines conditions.
Diagramme de classes
Code
public class Context { /** * L'instance de la stratégie choisie */ private Strategy strategy; /** * Constructeur initialisant la stratégie choisie pour le * contexte */ public Context(Strategy strategy) { this.strategy = strategy; } /** * Méthode exécutant l'algorithme */ public void contextInterface() { strategy.algorithmInterface(this); } }
public interface Strategy { /** * Méthode définissant l'appel à l'algorithme */ public void algorithmInterface(Context context); }
public class ConcreteStrategyA implements Strategy { /** * Méthode implémentant l'algorithme */ public void algorithmInterface(Context context) { // Implémentation de l'algorithme A en utilisant les // données de la classe Context } }
public class ConcreteStrategyB implements Strategy { /** * Méthode implémentant l'algorithme */ public void algorithmInterface(Context context) { // Implémentation de l'algorithme B en utilisant les // données de la classe Context } }
Exemples
Exemples | Classes | |
---|---|---|
Context | ConcreteStrategy | |
Calculer la taxe d'une commande suivant le pays. | CommandeClient | TaxeFr
TaxeUs ... |
Définir le type de mouvement d'un joueur pour un jeu. | Joueur | Joystick1
Joystick2 Ordinateur |