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);
    }
}
相关推荐
星空寻流年1 小时前
设计模式第一章(建造者模式)
java·设计模式·建造者模式
蒋星熠2 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
至此流年莫相忘4 小时前
设计模式:策略模式
设计模式·策略模式
ytadpole6 小时前
揭秘设计模式:命令模式-告别混乱,打造优雅可扩展的代码
java·设计模式
努力也学不会java9 小时前
【设计模式】 外观模式
设计模式·外观模式
deepwater_zone9 小时前
设计模式(策略,观察者,单例,工厂方法)
设计模式
宁静致远202113 小时前
【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
c++·观察者模式·设计模式
User_芊芊君子16 小时前
【Java】设计模式——单例、工厂、代理模式
java·设计模式·代理模式
YA33318 小时前
java设计模式二、工厂
java·开发语言·设计模式
烛阴1 天前
【TS 设计模式完全指南】从零到一:掌握TypeScript建造者模式,让你的对象构建链式优雅
javascript·设计模式·typescript