Modèle Strategy : algorithmes interchangeables
Encapsulez des algorithmes de tri ou de paiement derrière une interface Strategy pour les remplacer à l’exécution.
Modèle Strategy : algorithmes interchangeables est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
L’intention de la stratégie
La stratégie définit une famille d’algorithmes, encapsule chacun d’eux et les rend interchangeables. Elle permet à l’algorithme de varier indépendamment du contexte qui l’utilise.
Le problème sans stratégie
Sans stratégie, la sélection de l’algorithme est enfouie dans des chaînes if-else. Ajouter un nouvel algorithme impose de modifier la classe de contexte, ce qui viole le principe ouvert/fermé.
public double sort(List<Integer> data, String method) {
if (method.equals("bubble")) { /* bubble sort */ }
else if (method.equals("merge")) { /* merge sort */ }
// adding quicksort requires editing this class
}Interface de stratégie
Définissez une @FunctionalInterface ou une interface classique représentant le contrat de l’algorithme. Chaque implémentation encapsule un algorithme différent.
public interface SortStrategy {
void sort(List<Integer> data);
}
public class BubbleSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { /* bubble sort logic */ }
}
public class QuickSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { Collections.sort(data); }
}Classe de contexte
Le contexte contient une référence vers une stratégie et lui délègue l’exécution de l’algorithme. La stratégie peut être remplacée à l’exécution.
public class Sorter {
private SortStrategy strategy;
public Sorter(SortStrategy strategy) { this.strategy = strategy; }
public void setStrategy(SortStrategy s) { this.strategy = s; }
public void sort(List<Integer> data) { strategy.sort(data); }
}Changer de stratégie à l’exécution
Changez de stratégie à la volée sans modifier le contexte. Le comportement peut ainsi être configuré depuis l’extérieur de la classe.
Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.sort(data); // uses bubble sort
sorter.setStrategy(new QuickSortStrategy());
sorter.sort(data); // now uses quick sortStratégies lambda
Lorsque l’interface de stratégie est une @FunctionalInterface, utilisez directement des lambdas : il n’est pas nécessaire de créer des classes explicites pour les stratégies simples.
Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);Stratégie pour le traitement des paiements
Exemple classique du monde réel : un contexte de paiement accepte différentes stratégies de paiement (carte bancaire, PayPal, cryptomonnaie) sans connaître les détails de chacune.
public interface PaymentStrategy {
void pay(double amount);
}
new PaymentProcessor(new CreditCardStrategy("4111...")).pay(99.99);
new PaymentProcessor(new PayPalStrategy("user@email.com")).pay(99.99);Stratégie de compression
Un processeur de fichiers peut utiliser une CompressionStrategy. Intégrez GZIP, ZIP ou LZ4 sans modifier la chaîne de traitement des fichiers.
public interface CompressionStrategy {
byte[] compress(byte[] data) throws IOException;
}
public class GzipStrategy implements CompressionStrategy {
public byte[] compress(byte[] data) throws IOException { /* gzip */ return new byte[0]; }
}Combiner stratégie et fabrique
Utilisez une fabrique pour sélectionner la stratégie en fonction de la configuration, en gardant la logique de sélection séparée du contexte comme des stratégies elles-mêmes.
SortStrategy strategy = switch (config.getSortMethod()) {
case "bubble" -> new BubbleSortStrategy();
case "merge" -> new MergeSortStrategy();
default -> Collections::sort;
};
new Sorter(strategy).sort(data);Stratégie et méthode modèle
La méthode modèle utilise l’héritage : le squelette se trouve dans la classe de base, et les sous-classes redéfinissent certaines étapes. La stratégie utilise la composition : l’algorithme est entièrement externe. Préférez la stratégie pour bénéficier d’une plus grande flexibilité.
La stratégie dans le JDK
Comparator est la stratégie canonique du JDK. Passez différents comparateurs à Collections.sort pour modifier l’algorithme de tri sans toucher au code de la collection.
List<String> names = List.of("Bob", "Alice", "Charlie");
names.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);Tester les stratégies
Les stratégies sont faciles à tester isolément : appelez simplement strategy.sort(data) dans un test unitaire. Injectez des stratégies simulées dans le contexte pour tester sa logique d’orchestration.
Vérification rapide
Quelle est la principale différence structurelle entre la stratégie et la méthode modèle ?
Récapitulatif
La stratégie encapsule des algorithmes interchangeables derrière une interface commune. Utilisez des lambdas pour les stratégies simples et des classes pour les stratégies complexes. Combinez-les avec des fabriques pour une sélection pilotée par la configuration.
Questions Fréquemment Posées
La leçon « Modèle Strategy : algorithmes interchangeables » est-elle gratuite ?
Oui — le texte complet de « Modèle Strategy : algorithmes interchangeables » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèle Strategy : algorithmes interchangeables » ?
Encapsulez des algorithmes de tri ou de paiement derrière une interface Strategy pour les remplacer à l’exécution. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Modèle Strategy : algorithmes interchangeables » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle Observer : notification d’événements
- Modèle Strategy : algorithmes interchangeables
- Modèle Command : encapsuler des actions
- Template Method : définir des squelettes d’algorithmes