23种设计模式

一、创建型

1、简单工厂模式

1)定义抽象类

java 复制代码
/**
 * <p>
 * 抽象类
 * </p>
 *
 * @author fcy
 * @since 2025-08-18
 */
public abstract class CashSuper {

    abstract double acceptCash(double money);
}

2)无折扣实现类

java 复制代码
/**
 * <p>
 * 不打折正常类
 * </p>
 *
 * @author fcy
 * @since 2025-08-18
 */
public class CashNormal extends CashSuper{
    @Override
    double acceptCash(double money) {
        return money;
    }
}

3)打折实现类

java 复制代码
/**
 * <p>
 * 折扣类
 * </p>
 *
 * @author fcy
 * @since 2025-08-18
 */
public class CashRebate extends CashSuper{

    private double rebate = 1d;

    public CashRebate(double rebate) {
        this.rebate = rebate;
    }
    @Override
    double acceptCash(double money) {
        return money * rebate;
    }
}

4)满减实现类

java 复制代码
/**
 * <p>
 * 满减类 满多少返多少
 * </p>
 *
 * @author fcy
 * @since 2025-08-18
 */
public class CashReturn extends CashSuper{

    private double moneyCondition = 0.0d;

    private double moneyReturn = 0.0d;

    public CashReturn(double moneyCondition, double moneyReturn) {
        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }

    @Override
    double acceptCash(double money) {
        double result = money;
        if (money > moneyCondition) {
            result = money - Math.floor(money / moneyCondition) * moneyReturn;
        }
        return result;
    }
}

5)定义工厂类

java 复制代码
/**
 * <p>
 * 工厂类
 * </p>
 *
 * @author fcy
 * @since 2025-08-18
 */
public class CashFactory {

    public static CashSuper createCashAdapter(String type) {
        return switch(type) {
            case "正常收费" -> new CashNormal();
            case "满300减30" -> new CashReturn(300,30);
            case "打八折" -> new CashRebate(0.8);
            default -> throw new RuntimeException();
        };
    }
}

6)测试类

java 复制代码
public class Test {
    public static void main(String[] args) {
        CashFactory cashFactory = new CashFactory();
        CashSuper cashSuper = cashFactory.createCashAdapter("满300减30");
        CashSuper cashSuper1 = cashFactory.createCashAdapter("打八折");
        double cost = cashSuper.acceptCash(700);
        double cost1 = cashSuper1.acceptCash(200);
        System.out.println(cost);
        System.out.println(cost1);
    }
}

二、结构型

三、行为型

1、策略模式

1)使用简单工厂模式的类

2)创建上下文类

java 复制代码
/**
 * <p>
 * 上下文类
 * </p>
 *
 * @author fcy
 * @since 2025-08-19
 */
public class CashContext {

    private CashSuper cs;

    public CashContext(String type) {
        this.cs = switch(type) {
            case "正常收费" -> new CashNormal();
            case "满300减30" -> new CashReturn(300,30);
            case "打八折" -> new CashRebate(0.8);
            default -> throw new RuntimeException();
        };
    }

    public double getResult(double money) {
        return cs.acceptCash(money);
    }
}

3)测试类

java 复制代码
public class Test {
    public static void main(String[] args) {
        double cost = new CashContext("打八折").getResult(700);
        double cost1 = new CashContext("满300减30").getResult(200);
        System.out.println(cost);
        System.out.println(cost1);
    }
}
相关推荐
HjhIron9 小时前
从Prompt到Context:大模型应用开发的范式转移
设计模式·aigc·ai编程
咖啡八杯2 天前
GoF设计模式——中介者模式
java·后端·spring·设计模式
胡萝卜术2 天前
从“分数打架”到“排名投票”:为什么你的ChatBI必须用RRF?
算法·设计模式·面试
亦暖筑序3 天前
Java 8老系统Browser Agent实战:三层拦截把AI操作后台变成可审计流程
java·后端·设计模式
青禾网络5 天前
Web 前端如何接入 AI 音效生成:从零到可用的完整方案
人工智能·设计模式
ZJPRENO6 天前
吃透软件开发六大设计原则,告别烂代码
设计模式
咖啡八杯6 天前
GoF设计模式——命令模式
java·设计模式·架构
花椒技术7 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
艺艺生辉7 天前
迭代器模式-"我也想被增强for循环"
设计模式