"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Comprender el patrón de diseño de estrategias en Java

Comprender el patrón de diseño de estrategias en Java

Publicado el 2024-08-21
Navegar:818

Understanding the Strategy Design Pattern in Java

Comprender el patrón de diseño de estrategias en Java

Problema

El patrón Estrategia aborda la necesidad de definir una familia de algoritmos, encapsular cada uno y hacerlos intercambiables. Este patrón permite que el algoritmo varíe independientemente de los clientes que lo utilicen. Es útil cuando tienes varias formas de realizar una tarea específica y deseas elegir el algoritmo en tiempo de ejecución.

Solución

El patrón Estrategia involucra tres componentes principales:

  1. Contexto: El objeto que contiene una referencia a un objeto de estrategia y lo utiliza para ejecutar el algoritmo.
  2. Estrategia: Una interfaz común a todos los algoritmos compatibles. El contexto utiliza esta interfaz para llamar al algoritmo definido por una estrategia concreta.
  3. Estrategia Concreta: Clases que implementan la interfaz de estrategia, proporcionando algoritmos específicos.

El contexto delega la ejecución del algoritmo al objeto de estrategia, lo que permite seleccionar el algoritmo en tiempo de ejecución.

Pros y contras

Ventajas

  • Encapsulación de algoritmos: Cada algoritmo está encapsulado en su propia clase, lo que facilita cambiar entre ellos y agregar nuevos algoritmos sin cambiar el contexto.
  • Principio de responsabilidad única: La clase de contexto se simplifica ya que delega la implementación del algoritmo a clases de estrategia.
  • Principio abierto/cerrado: Se pueden introducir nuevas estrategias sin alterar el contexto o las clases de estrategia existentes.

Contras

  • Aumento del número de clases: El patrón aumenta el número de clases en el código base debido a la creación de nuevas clases de estrategia para cada algoritmo.
  • Complejidad en el cambio de estrategias: Si no se gestiona bien, el cambio dinámico de estrategias en tiempo de ejecución puede introducir complejidad y posibles errores.

Ejemplo de aplicación en el mundo real

Un ejemplo práctico del patrón Estrategia es un sistema de procesamiento de pagos donde se implementan diferentes métodos de pago (por ejemplo, tarjeta de crédito, PayPal, transferencia bancaria) como estrategias diferentes. El cliente puede elegir la estrategia de pago adecuada en tiempo de ejecución.

Código de ejemplo en Java

Patrón de estrategia en código:

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);
    }
}
Declaración de liberación Este artículo se reproduce en: https://dev.to/diegosilva13/understanding-the-strategy-design-pattern-in-java-3ah4?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3