解释器模式(Interpreter Pattern):电商平台优惠规则解析实战案例分析

肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注

欢迎 点赞,点赞,点赞。

关注公号Solomon肖哥弹架构获取更多精彩内容

在电商平台中,优惠规则多种多样,例如满减、打折、买赠等。为了能够灵活地解析和应用这些优惠规则,需要一个能够解释和执行优惠规则的系统。

2. 为什么要使用解释器设计模式

解释器模式允许定义一个语言的文法,并建立一个解释器,该解释器可以解释和执行语言中的句子,非常适合用于解析和执行优惠规则。

3. 标准解释器设计模式图

4. 业务解释器设计模式图

5. 业务代码参考

java 复制代码
    // 优惠规则接口
    interface DiscountRule {
        void parse(String rule);
        double calculateDiscount(double amount);
    }

    // 满减优惠规则
    class FullReductionRule implements DiscountRule {
        private int threshold;
        private double discountAmount;

        @Override
        public void parse(String rule) {
            // 解析规则字符串,例如 "1000-50" 表示满1000减50
            String[] parts = rule.split("-");
            threshold = Integer.parseInt(parts[0]);
            discountAmount = Double.parseDouble(parts[1]);
        }

        @Override
        public double calculateDiscount(double amount) {
            if (amount >= threshold) {
                return discountAmount;
            }
            return 0;
        }
    }

    // 百分比优惠规则
    class PercentageDiscountRule implements DiscountRule {
        private double percentage;

        @Override
        public void parse(String rule) {
            // 解析规则字符串,例如 "0.8" 表示8折
            percentage = Double.parseDouble(rule);
        }

        @Override
        public double calculateDiscount(double amount) {
            return amount * (1 - percentage);
        }
    }

    // 优惠上下文
    class DiscountContext {
        private DiscountRule rule;
        private double discount;

        public void setRule(DiscountRule rule) {
            this.rule = rule;
        }

        public void setDiscount(double discount) {
            this.discount = discount;
        }

        public double getDiscount() {
            return discount;
        }

        public void applyDiscount(double amount) {
            if (rule != null) {
                discount = rule.calculateDiscount(amount);
            }
        }
    }

    // 客户端使用
    class ECommerceDiscountSystem {
        public static void main(String[] args) {
            DiscountContext context = new DiscountContext();
            String rule = "1000-50"; // 满1000减50
            context.setRule(new FullReductionRule());
            context.applyDiscount(1500); // 应用优惠规则
            System.out.println("Discount: " + context.getDiscount());

            // 应用百分比优惠规则
            rule = "0.8"; // 8折
            context.setRule(new PercentageDiscountRule());
            context.applyDiscount(200); // 应用优惠规则
            System.out.println("Discount: " + context.getDiscount());
        }
    }

6. 使用解释器设计模式的好处

  • 规则灵活性:可以灵活地添加和修改优惠规则,而不需要修改现有的优惠系统代码。
  • 易于扩展 :新增优惠规则时,只需实现DiscountRule接口。

7. 其他使用解释器设计模式场景参考

  • 文本解析:如解析配置文件或脚本语言。
  • 语法分析:如编程语言的语法分析器。

8. 可参考开源框架

  • ANTLR:一个强大的解析器生成器,广泛用于实现解释器模式。

总结

解释器模式非常适合用于实现规则引擎,它允许系统灵活地解释和执行定义好的规则,如电商平台的优惠规则。

历史热点文章

相关推荐
这是个栗子4 分钟前
关于 TypeScript 的介绍
前端·javascript·typescript
亿元程序员11 分钟前
亿元Cocos小游戏实战合集指南和答疑
前端
开开心心就好14 分钟前
伪装文件历史记录!修改时间的黑科技软件
java·前端·科技·r语言·edge·pdf·语音识别
饼干哥哥19 分钟前
聊了50个AI出海的市场团队,我总结了达人营销的7宗罪
前端
qq_4275060820 分钟前
vscode使用kimi code的简单经验分享
前端·vscode·ai编程
恋猫de小郭22 分钟前
Claude Code 源码里有意思设定:伪造、投毒、卧底、封号
前端·人工智能·ai编程
无籽西瓜a26 分钟前
【西瓜带你学设计模式 | 第五期 - 建造者模式】建造者模式 —— 产品构建实现、优缺点与适用场景及模式区别
java·后端·设计模式·软件工程·建造者模式
Blurpath住宅代理36 分钟前
网页抓取(Web Scraping)完整技术指南:从原理到实战
前端
钰fly40 分钟前
Halcon联合编程适应图像的方法(picture)
开发语言·前端·javascript
木斯佳1 小时前
前端八股文面经大全:字节跳动前端一面·深度解析(Plus Ultra版)(2026-03-30)·面经深度解析
前端·设计模式·八股·光栅化