在策略设计模式中,我们通常会定义一个通用的策略接口,所有具体的策略类都会实现这个接口,然后,我们在上下文类中持有一个对策略接口的引用,并通过设置不同的策略对象来动态改变行为。

不使用策略设计模式案例
考虑一个电子商务系统,其中用户可以选择不同的支付方式:信用卡支付、支付宝支付、微信支付。如果我们没有使用策略设计模式,可能会写出类似下面的实现:

流程图:

信用卡
支付宝
微信支付
其他方式
开始结账
支付方式
输出: 使用信用卡支付 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); 
}

奔放的炒粉
1 声望1 粉丝