策略模式介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中。策略模式使得算法可以在运行时根据需要相互替换,提高了代码的灵活性和可维护性。
示例:支付系统
为了演示策略模式的应用,我们将构建一个简单的支付系统。该支付系统支持多种支付方式,如信用卡、支付宝和微信支付。我们将使用策略模式来实现这些支付方式。
首先,我们创建一个名为PaymentStrategy的接口,它定义了所有支付策略的公共方法:
public interface PaymentStrategy {
void pay(int amount);
}
接下来,我们为每种支付方式创建一个实现PaymentStrategy接口的类:
public class CreditCardStrategy implements PaymentStrategy {
private String name;
private String cardNumber;
private String cvv;
private String expirationDate;
public CreditCardStrategy(String name, String cardNumber, String cvv, String expirationDate) {
this.name = name;
this.cardNumber = cardNumber;
this.cvv = cvv;
this.expirationDate = expirationDate;
}
@Override
public void pay(int amount) {
System.out.println(amount + " paid with credit card.");
}
}
public class AlipayStrategy implements PaymentStrategy {
private String email;
private String password;
public AlipayStrategy(String email, String password) {
this.email = email;
this.password = password;
}
@Override
public void pay(int amount) {
System.out.println(amount + " paid with Alipay.");
}
}
public class WeChatPayStrategy implements PaymentStrategy {
private String phoneNumber;
public WeChatPayStrategy(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
@Override
public void pay(int amount) {
System.out.println(amount + " paid with WeChat Pay.");
}
}
现在,我们创建一个名为ShoppingCart的类,用于模拟购物车。购物车将包含一个商品列表以及用于支付的策略:
public class ShoppingCart {
private List<Item> items;
private PaymentStrategy paymentStrategy;
public ShoppingCart() {
this.items = new ArrayList<>();
}
public void addItem(Item item) {
items.add(item);
}
public void removeItem(Item item) {
items.remove(item);
}
public int calculateTotal() {
int total = 0;
for (Item item : items) {
total += item.getPrice();
}
return total;
}
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void pay() {
int amount = calculateTotal();
paymentStrategy.pay(amount);
}
}
最后,我们在主方法中创建一个购物车实例,并根据需要设置支付策略:
public static void main(String[] args) {
ShoppingCart cart = new ShoppingCart();
cart.addItem(new Item("Item1", 100));
cart.addItem(new Item("Item2", 150));
// 使用信用卡支付
cart.setPaymentStrategy(new CreditCardStrategy("John Doe", "1234567890123456", "123", "12/25"));
cart.pay();
// 使用支付宝支付
cart.setPaymentStrategy(new AlipayStrategy("[email protected]", "mypassword"));
cart.pay();
// 使用微信支付
cart.setPaymentStrategy(new WeChatPayStrategy("1234567890"));
cart.pay();
}
运行此代码,我们可以看到购物车根据不同的支付策略进行支付:
250 paid with credit card.
250 paid with Alipay.
250 paid with WeChat Pay.
通过使用策略模式,我们可以根据需要轻松地添加新的支付方式,而无需修改购物车的代码。这使得我们的支付系统更加灵活和可维护。
总结
策略模式是一种设计模式,允许将一组算法封装到具有共同接口的独立类中。这使得我们可以在运行时根据需要灵活地替换算法,从而提高代码的灵活性和可维护性。在本示例中,我们演示了如何使用策略模式为支付系统添加多种支付方式。通过使用策略模式,我们可以轻松地添加新的支付方式,而无需修改现有代码。这使得我们的支付系统更加灵活和可维护。