"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comprendre le modèle de conception de stratégie en Java

Comprendre le modèle de conception de stratégie en Java

Publié le 2024-08-21
Parcourir:328

Understanding the Strategy Design Pattern in Java

Comprendre le modèle de conception de stratégie en Java

Problème

Le modèle Stratégie répond à la nécessité de définir une famille d'algorithmes, d'encapsuler chacun d'eux et de les rendre interchangeables. Ce modèle permet à l'algorithme de varier indépendamment des clients qui l'utilisent. Ceci est utile lorsque vous disposez de plusieurs façons d’effectuer une tâche spécifique et que vous souhaitez choisir l’algorithme au moment de l’exécution.

Solution

Le modèle de stratégie implique trois composants principaux :

  1. Contexte : L'objet qui contient une référence à un objet de stratégie et l'utilise pour exécuter l'algorithme.
  2. Stratégie : Une interface commune à tous les algorithmes pris en charge. Le contexte utilise cette interface pour appeler l'algorithme défini par une stratégie concrète.
  3. Stratégie concrète : Classes qui implémentent l'interface de stratégie, fournissant des algorithmes spécifiques.

Le contexte délègue l'exécution de l'algorithme à l'objet de stratégie, ce qui permet de sélectionner l'algorithme au moment de l'exécution.

Avantages et inconvénients

Avantages

  • Encapsulation des algorithmes : Chaque algorithme est encapsulé dans sa propre classe, ce qui facilite le basculement entre eux et l'ajout de nouveaux algorithmes sans changer le contexte.
  • Principe de responsabilité unique : La classe de contexte est simplifiée car elle délègue la mise en œuvre de l'algorithme aux classes de stratégie.
  • Principe ouvert/fermé : De nouvelles stratégies peuvent être introduites sans modifier le contexte ou les classes de stratégie existantes.

Inconvénients

  • Augmentation du nombre de classes : Le modèle augmente le nombre de classes dans la base de code en raison de la création de nouvelles classes de stratégie pour chaque algorithme.
  • Complexité des stratégies de changement : Si elles ne sont pas bien gérées, les stratégies de changement dynamique au moment de l'exécution peuvent introduire de la complexité et des erreurs potentielles.

Exemple d'application dans le monde réel

Un exemple pratique du modèle de stratégie est celui d'un système de traitement des paiements dans lequel différentes méthodes de paiement (par exemple, carte de crédit, PayPal, virement bancaire) sont mises en œuvre en tant que différentes stratégies. Le client peut choisir la stratégie de paiement appropriée au moment de l'exécution.

Exemple de code en Java

Modèle de stratégie dans le code :

java
// Strategy Interface
public interface PaymentStrategy {
    void pay(int amount);
}

// Concrete Strategy 1
public class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;

    public CreditCardPayment(String cardNumber) {
        this.cardNumber = cardNumber;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount   " paid with credit card "   cardNumber);
    }
}

// Concrete Strategy 2
public class PayPalPayment implements PaymentStrategy {
    private String email;

    public PayPalPayment(String email) {
        this.email = email;
    }

    @Override
    public void pay(int amount) {
        System.out.println(amount   " paid using PayPal account "   email);
    }
}

// Context
public class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9876-5432"));
        cart.checkout(100);

        cart.setPaymentStrategy(new PayPalPayment("[email protected]"));
        cart.checkout(200);
    }
}
Déclaration de sortie Cet article est reproduit sur : https://dev.to/diegosilva13/understanding-the-strategy-design-pattern-in-java-3ah4?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3