赞
踩
策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。这种模式定义了一系列算法,并使这些算法可以相互替换,使得算法的变化独立于使用算法的客户。
以下是策略模式的一般结构:
Context(上下文):负责维护一个对Strategy对象的引用,并且将客户请求委托给Strategy对象。
Strategy(策略):定义所有支持的算法的公共接口。通常是一个接口或者抽象类。
ConcreteStrategy(具体策略):实现了Strategy接口的具体算法实现。
下面是一个简单的Java示例,演示了如何使用策略模式:
// 1. Strategy interface PaymentStrategy { void pay(double amount); } // 2. ConcreteStrategy class CreditCardPayment implements PaymentStrategy { private String cardNumber; private String expirationDate; private String cvv; public CreditCardPayment(String cardNumber, String expirationDate, String cvv) { this.cardNumber = cardNumber; this.expirationDate = expirationDate; this.cvv = cvv; } @Override public void pay(double amount) { System.out.println("Paid $" + amount + " using Credit Card"); } } 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("Paid $" + amount + " using PayPal"); } } // 3. Context class ShoppingCart { private PaymentStrategy paymentStrategy; public void setPaymentStrategy(PaymentStrategy paymentStrategy) { this.paymentStrategy = paymentStrategy; } public void checkout(double amount) { paymentStrategy.pay(amount); } } // 4. 使用示例 public class Main { public static void main(String[] args) { // 创建购物车对象 ShoppingCart cart = new ShoppingCart(); // 设置支付策略为信用卡 cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012", "10/25", "123")); // 结账 cart.checkout(100.0); // 设置支付策略为PayPal cart.setPaymentStrategy(new PayPalPayment("example@example.com", "password")); // 结账 cart.checkout(200.0); } }
在这个示例中,PaymentStrategy是策略接口,CreditCardPayment和PayPalPayment是具体策略。ShoppingCart是上下文,它持有一个对PaymentStrategy的引用,并在结账时调用支付方法。通过更改支付策略,我们可以在不修改ShoppingCart的情况下选择不同的支付方式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。