📌 PDF:AI人工智能 — 大模型微调与部署实战项目
大白话说Java设计模式-49-综合实战中:营销全链路设计模式应用
📌 一句话本质:营销全链路是设计模式的"高级战场",5 大模式解决规则动态化、计算性能、灵活扩展。
🏷️ 标签:综合实战 / 营销全链路 / 设计模式协作 / 大白商城 🎯 适合:所有 Java 工程师
目录
- 一、营销全链路流程图
- 二、5 大设计模式协作
- 三、完整代码实战
- 四、模式协作关系
- 五、性能优化总结
- 六、本篇小结 + 下篇预告
一、营销全链路流程图
用户下单
↓
┌──────────────────────────────────────┐
│ 营销规则加载(解释器) │
│ "FULL_REDUCE(100,10) AND DISCOUNT(0.8)" │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 优惠计算链(责任链) │
│ FullReduce → Discount → InstantReduce │
│ → Coupon → Points │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 营销规则作用于商品(访问者) │
│ Goods / Order / Coupon 三元素 │
│ + FullReduceVisitor / DiscountVisitor │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 优惠券模板(享元) │
│ 优惠券模板共享,减少内存 │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 优惠策略(策略) │
│ 满减/折扣/立减/优惠券 多种算法 │
└──────────────┬───────────────────────┘
↓
输出最终价格
二、5 大设计模式协作
2.1 模式一:责任链(优惠计算链)
/**
* ✅ 责任链:优惠链
*/
public interface DiscountHandler {
void apply(DiscountContext context, DiscountChain chain);
}
@Component
public class FullReduceHandler implements DiscountHandler {
@Override
public void apply(DiscountContext ctx, DiscountChain chain) {
if (ctx.getAmount().compareTo(new BigDecimal("100")) > 0) {
ctx.setAmount(ctx.getAmount().subtract(new BigDecimal("10")));
}
chain.next(ctx);
}
}
作用:优惠规则可动态组合。
2.2 模式二:访问者(多元素多规则)
/**
* ✅ 访问者:营销作用于多元素
*/
public interface MarketingElement {
void accept(MarketingVisitor visitor);
}
public interface MarketingVisitor {
void visit(Goods goods);
void visit(Order order);
void visit(Coupon coupon);
}
public class Goods implements MarketingElement {
@Override
public void accept(MarketingVisitor visitor) {
visitor.visit(this);
}
}
public class FullReduceVisitor implements MarketingVisitor {
@Override
public void visit(Goods goods) {
// 满减作用于商品
}
@Override
public void visit(Order order) {
// 满减作用于订单
}
}
作用:3 种元素 × 8 种规则 = 24 处逻辑,统一抽象。
2.3 模式三:解释器(业务规则动态化)
/**
* ✅ 解释器:自定义规则语言
*/
public interface RuleExpression {
BigDecimal interpret(Map<String, Object> context);
}
public class FullReduceExpression implements RuleExpression {
@Override
public BigDecimal interpret(Map<String, Object> context) {
// 满 100 减 10
}
}
/**
* ✅ 业务方配置规则字符串
* "FULL_REDUCE(100, 10) AND DISCOUNT(0.8)"
*/
public class RuleParser {
public static RuleExpression parse(String rule) {
// 解析 + 生成表达式
}
}
作用:业务方可视化配置规则。
2.4 模式四:享元(优惠券模板)
/**
* ✅ 享元:优惠券模板共享
*/
@Component
public class CouponTemplateFactory {
private final ConcurrentHashMap<String, CouponTemplate> templatePool
= new ConcurrentHashMap<>();
public CouponTemplate getTemplate(String code) {
return templatePool.computeIfAbsent(code, this::createTemplate);
}
}
作用:100 万张优惠券共享模板,从 10GB 降到 50MB。
2.5 模式五:策略(支付优惠)
/**
* ✅ 策略:支付优惠
*/
public interface DiscountStrategy {
BigDecimal apply(BigDecimal amount, User user);
}
@Component
public class NewUserDiscount implements DiscountStrategy {
@Override
public BigDecimal apply(BigDecimal amount, User user) {
if (user.isNew()) {
return amount.multiply(new BigDecimal("0.9"));
}
return amount;
}
}
@Component
public class VipDiscount implements DiscountStrategy {
@Override
public BigDecimal apply(BigDecimal amount, User user) {
if (user.isVip()) {
return amount.multiply(new BigDecimal("0.8"));
}
return amount;
}
}
作用:加新优惠策略只加 1 个类。
三、完整代码实战
3.1 营销服务(综合)
/**
* ✅ 营销服务:5 大模式协作
*/
@Service
public class MarketingService {
@Autowired
private List<DiscountHandler> handlers; // 责任链
@Autowired
private MarketingContext marketingContext; // 策略
@Autowired
private CouponTemplateFactory templateFactory; // 享元
/**
* ✅ 计算最终金额
*/
public BigDecimal calculate(Order order, List<String> rules) {
BigDecimal amount = order.getTotal();
// 1️⃣ 解释器:解析规则
RuleExpression expression = RuleParser.parseAnd(rules);
Map<String, Object> ctx = new HashMap<>();
ctx.put("amount", amount);
amount = expression.interpret(ctx);
// 2️⃣ 责任链:优惠叠加
DiscountContext dc = new DiscountContext();
dc.setAmount(amount);
dc.setOrder(order);
DiscountChain chain = new DiscountChain(handlers);
chain.process(dc);
amount = dc.getAmount();
// 3️⃣ 策略:用户优惠
amount = marketingContext.apply(amount, order.getUser());
// 4️⃣ 享元:优惠券模板
for (Coupon coupon : order.getCoupons()) {
CouponTemplate template = templateFactory.getTemplate(coupon.getCode());
amount = template.apply(amount);
}
return amount;
}
}
3.2 访问者:营销计算
/**
* ✅ 访问者:营销规则作用于多元素
*/
public class MarketingCalculator implements MarketingVisitor {
private BigDecimal totalDiscount = BigDecimal.ZERO;
@Override
public void visit(Goods goods) {
// 商品单独折扣
}
@Override
public void visit(Order order) {
// 订单整体折扣
}
@Override
public void visit(Coupon coupon) {
// 优惠券折扣
totalDiscount = totalDiscount.add(coupon.getAmount());
}
}
3.3 责任链:优惠叠加
/**
* ✅ 责任链:5 种优惠叠加
*/
public class DiscountChain {
private final List<DiscountHandler> handlers;
private int index = 0;
public void process(DiscountContext context) {
if (index < handlers.size()) {
DiscountHandler handler = handlers.get(index++);
handler.apply(context, this);
}
}
}
四、模式协作关系
营销全链路用了哪些模式?
│
├── 1. 责任链(DiscountChain)
│ └── 5 种优惠叠加
│
├── 2. 访问者(MarketingVisitor)
│ └── 3 种元素 × 8 种规则
│
├── 3. 解释器(RuleParser)
│ └── 业务方配置规则
│
├── 4. 享元(CouponTemplateFactory)
│ └── 优惠券模板共享
│
└── 5. 策略(DiscountStrategy)
└── 用户分层优惠
4.1 模式协作图
┌──────────────────────────────────────┐
│ 业务方配置规则(解释器) │
│ "FULL_REDUCE(100,10) AND …" │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 解析规则(解释器) │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 优惠叠加(责任链) │
│ FullReduce → Discount → … │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 营销作用于多元素(访问者) │
│ Goods / Order / Coupon │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 用户分层优惠(策略) │
│ NewUser / Vip / Normal │
└──────────────┬───────────────────────┘
↓
┌──────────────────────────────────────┐
│ 优惠券模板(享元) │
│ 模板共享 + 用户实例 │
└──────────────────────────────────────┘
五、性能优化总结
5.1 内存优化
| 商品标签 | 5GB | 50MB | 享元 |
| 优惠券模板 | 10GB | 50MB | 享元 |
| 字典数据 | 100MB | 1MB | 享元 |
5.2 CPU 优化
| 优惠计算 | O(N²) | O(N) | 责任链 |
| 多元素遍历 | 多次循环 | 一次遍历 | 访问者 |
| 规则解析 | 每次解析 | 编译缓存 | 解释器 |
5.3 可维护性
| 加新优惠 | 改 8 处 | 加 1 个类 | 策略 + 责任链 |
| 改规则 | 改代码 | 改配置 | 解释器 |
| 加新元素 | 改 8 处 | 加 1 个元素 | 访问者 |
六、本篇小结 + 下篇预告
6.1 本篇小结
6.2 实战心法
- 责任链 + 解释器:规则动态化
- 访问者 + 享元:性能与可维护
- 策略 + 单例:分层用户优惠
6.3 下篇预告
第 50 篇【综合实战 – 下篇】:大白商城技术架构全链路设计模式应用
下一篇我们看技术架构全链路——监控/配置/中间件/缓存/分布式,用到了另外 6 大模式:
并附完整的代码 + 流程图 + 模式协作图。
觉得对您有帮助,麻烦点点关注啦,您的关注是我创作的最大动力~ 🎯
网硕互联帮助中心





评论前必须登录!
注册