11.4

策略模式

策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装在独立的可互换的策略类中,使得算法可以独立于客户端而变化。

下面是使用Java编写的一个简单的策略模式示例:

// 策略接口
interface PaymentStrategy {
    void pay(double amount);
}

// 具体策略类1
class CreditCardPayment implements PaymentStrategy {
    private String cardNumber;
    private String cvv;

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

    @Override
    public void pay(double amount) {
        System.out.println("Paying $" + amount + " with credit card: " + cardNumber);
    }
}

// 具体策略类2
class PayPalPayment implements PaymentStrategy {
    private String email;
    private String password;

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

    @Override
    public void pay(double amount) {
        System.out.println("Paying $" + amount + " with PayPal account: " + email);
    }
}

// 环境类
class ShoppingCart {
    private PaymentStrategy paymentStrategy;

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

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

// 示例
public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        // 使用信用卡支付
        PaymentStrategy creditCardPayment = new CreditCardPayment("1234567890", "123");
        cart.setPaymentStrategy(creditCardPayment);
        cart.checkout(100.50);

        // 使用PayPal支付
        PaymentStrategy payPalPayment = new PayPalPayment("example@example.com", "password");
        cart.setPaymentStrategy(payPalPayment);
        cart.checkout(250.75);
    }
}

在这个示例中,我们定义了一个策略接口 PaymentStrategy,并实现了两个具体的策略类 CreditCardPayment 和 PayPalPayment。然后,我们创建了一个环境类 ShoppingCart,它具有一个 paymentStrategy 成员变量,用于执行支付操作。通过设置不同的策略,我们可以在购物车中使用不同的支付方式进行结账。

在示例中,我们首先使用信用卡支付了购物车中的商品,然后使用 PayPal 账户进行支付。通过策略模式,我们可以动态地切换不同的支付策略,而不需要修改 ShoppingCart 类的代码。

策略模式使得算法的实现独立于客户端,并可以在运行时动态选择不同的算法,提高了代码的灵活性和可扩展性。

posted @ 2024-11-20 10:20  liuxuechao  阅读(1)  评论(0编辑  收藏  举报