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);
    }
}
相关推荐
新知图书6 小时前
第8章 多智能体协同
人工智能·设计模式·智能体
京师20万禁军教头9 小时前
39面向对象(高级)-设计模式
java·开发语言·设计模式
新知图书13 小时前
3.5 智能体设计模式1:反应式智能体与自动导航案例
人工智能·设计模式·智能体
码匠许师傅15 小时前
【设计模式精讲】21.迭代器模式(Iterator)
c++·设计模式·rpc·迭代器模式·软件工程·uml
Carl_奕然2 天前
【智能体】Agent的四种设计模式之:React(2026最新版)
javascript·人工智能·python·react.js·设计模式·语言模型
cfm_29142 天前
Spring核心设计模式
java·spring·设计模式
码匠许师傅3 天前
【设计模式精讲】15.享元模式(Flyweight)
c++·设计模式·享元模式·uml
事圆则缓3 天前
Android 常用设计模式速查
android·设计模式
码匠许师傅3 天前
【设计模式精讲】14.外观模式(Facade)
c++·设计模式·uml·外观模式
evans在进步3 天前
Java 常用设计模式(二):装饰器、适配器、责任链、模板方法、策略与观察者
java·开发语言·设计模式