在策略设计模式中,我们通常会定义一个通用的策略接口,所有具体的策略类都会实现这个接口,然后,我们在上下文类中持有一个对策略接口的引用,并通过设置不同的策略对象来动态改变行为。
不使用策略设计模式案例
考虑一个电子商务系统,其中用户可以选择不同的支付方式:信用卡支付、支付宝支付、微信支付。如果我们没有使用策略设计模式,可能会写出类似下面的实现:
流程图:
信用卡
支付宝
微信支付
其他方式
开始结账
支付方式
输出: 使用信用卡支付 X 元
输出: 使用支付宝支付 X 元
输出: 使用微信支付 X 元
输出: 未选择有效支付方式
结束
使用示例
ShoopingCart 类
public class ShoppingCart {
private String paymentMethod;
public ShoppingCart(String paymentMethod) {
this.paymentMethod = paymentMethod;
}
public void checkout(int amount) {
if (paymentMethod.equals("CreditCard")) {
System.out.println("使用信用卡支付 " + amount + " 元。");
} else if (paymentMethod.equals("AliPay")) {
System.out.println("使用支付宝支付 " + amount + " 元。");
} else if (paymentMethod.equals("WeChatPay")) {
System.out.println("使用微信支付 " + amount + " 元。");
} else {
System.out.println("未选择有效的支付方式。");
}
}
}
checkout 方法:这个方法模拟结账操作。它根据 paymentMethod 的值来判断使用哪种支付方式。它的逻辑如下:
如果支付方式是 CreditCard,则打印使用信用卡支付的提示。
如果支付方式是 AliPay,则打印使用支付宝支付的提示。
如果支付方式是 WeChatPay,则打印使用微信支付的提示。
如果支付方式是其他的字符串,打印 "未选择有效的支付方式." 提示无效支付方式。
执行代码
public class SpiApplication {
public static void main(String[] args) {
// 创建使用信用卡支付的购物车
ShoppingCart cart1 = new ShoppingCart("CreditCard");
cart1.checkout(1000);
// 创建使用支付宝支付的购物车
ShoppingCart cart2 = new ShoppingCart("AliPay");
cart2.checkout(500);
// 创建使用微信支付的购物车
ShoppingCart cart3 = new ShoppingCart("WeChatPay");
cart3.checkout(750);
// 创建使用无效支付方式的购物车
ShoppingCart cart4 = new ShoppingCart("PayPal");
cart4.checkout(300);
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。