设计模式——行为型——策略模式Strategy

Q:策略模式的特点

A:

  1. 具体算法从具体的业务方法中独立出来
  2. 策略模式是同行为的不同实现

Q:什么时候使用策略模式

A:多个if-else使用策略模式

收费对象类

java 复制代码
public class CashContext {
    private CashStrategy cashStrategy;

    public double getMoney(double money) {
        return cashStrategy.acceptCash(money);
    }
}

收费策略接口

java 复制代码
public interface CashStrategy { double acceptCash(double money); }

正常收费类

java 复制代码
public class NormalCash implements CashStrategy {
    @Override
    public double acceptCash(double money) {
        return money;
    }
}

打折收费类

java 复制代码
public class RebateCash implements CashStrategy {
    private double discounts = 10;

    @Override
    public double acceptCash(double money) {
        return money * discounts / 10;
    }
}

返利收费类

java 复制代码
public class ReturnCash implements CashStrategy {
    private double condition = 0;
    private double rebate = 0;

    @Override
    public double acceptCash(double money) {
        if (money >= condition) {
            money -= Math.floor(money / condition) * rebate;
        }
        return money;
    }
}

演示类

java 复制代码
public class Demo {
    public static void main(String[] args) {
        String discounts = "满300减100";
        CashContext cc = new CashContext();

        switch (discounts) {
            case "正常收费":
                cc.setCashStrategy(new NormalCash());
                break;
            case "打9折":
                cc.setCashStrategy(new RebateCash(9));
                break;
            case "满300减100":
                cc.setCashStrategy(new ReturnCash(300, 100));
                break;
        }

        double price = 400;
        double money = cc.getMoney(price);

        System.out.println("优惠后的费用为:" + money);
    }
}
相关推荐
博风8 小时前
8、设计模式应用举例:适配器模式:Iterator接口与Enumeration接口
设计模式·适配器模式
高晶9 小时前
ARM 嵌入式 Linux 系统 U-Boot 开发与移植实战M
设计模式·程序员
happy_baymax13 小时前
Dell G3 3590 黑苹果实战:OpenCore 1.0.8 + NullMoth 驱动让 GTX 1660 跑起 Metal
策略模式
遇码14 小时前
macOS 触摸板捏合在 GPUI 里无响应:vendor 打补丁,把手势合成为 cmd+滚轮事件
rust·图形渲染·策略模式·桌面应用·gpui
geovindu14 小时前
rust: Chain of Responsibility Pattern
开发语言·后端·设计模式·rust·责任链模式·行为模式
拆房老料15 小时前
【第四部分:Agentic 智能体设计模式】15.为什么 Agent 也需要设计模式
人工智能·设计模式·ai·ai-native
geovindu16 小时前
rust: Chain of Responsibility Pattern (续)
开发语言·后端·设计模式·rust·责任链模式·行为模式
Lost of 程序猿17 小时前
责任链模式实战:审批流里“层层把关“的艺术
后端·设计模式·asp.net·责任链模式
希洛兔1 天前
状态模式详解:让对象随内部状态自动改变行为
java·设计模式·状态模式
mmsx1 天前
Android 架构分层:MVVM 与 MVP 共存,网络层怎么切
android·策略模式·mvvm·mvp