Maison >Java >javaDidacticiel >Comprendre le modèle de conception de stratégie en Java

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

王林
王林original
2024-07-26 11:20:521004parcourir

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'entre eux et de les rendre interchangeables. Ce modèle permet à l'algorithme de varier indépendamment des clients qui l'utilisent. C'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 éléments 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 supportés. 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 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 permet de basculer facilement entre eux et d'ajouter 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 où 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("user@example.com"));
        cart.checkout(200);
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn