【1】策略模式 + 模板方法模式的联合应用

策略模式 + 模板方法模式的联合应用 的一个典型场景;你已经在代码中用到了策略模式,现在又引入了模板方法模式来解决"取数逻辑不同"的问题。下面我给你做一个系统梳理

🎯 策略模式(Strategy Pattern)在这里的作用

📌 定义

策略模式关注的是:一类问题有多种算法(策略)可选,运行时依据上下文选择合适的策略来处理。

它本质上就是 → 把行为抽象成接口,具体逻辑由不同实现类完成。

📌 在你的场景里

需要解决的问题: wafer 移动图表 (WaferMovingChart) 有多种展示方式,不同类型的 Chart 需要不同的处理逻辑。

抽象接口:

Java

public interface WtwrChartStrategy {

WtwrChartType getType();

void handleChartData(WaferMovingChartReq request, WaferMovingChartVO response);

}

多个策略实现:

ModuleTimeStrategy

ProcessingTimeStrategy

WaferMoveStrategy

工厂&上下文:

Service 不需要 if/else/switch,而是通过 chartStrategyFactory.getStrategy(request.getChartType()) 来挑选合适的策略。

📌 优点

扩展性:新增一种 Chart,只需写一个 Strategy 类,注册进工厂即可。

解耦:业务 Service 不关心处理细节,只管挑选策略。

单一职责:每种 Chart 的处理逻辑只在对应策略中维护。

👉 所以这里的大框架就是策略模式,它解决的核心是:不同 Chart 类型,使用不同业务处理逻辑。

🎯 模板方法模式(Template Method Pattern)在这里的作用

📌 定义

模板方法模式关注的是:某一类算法的执行步骤是固定的,但其中某些步骤细节可以交给子类决定。

父类提供"流程骨架",子类只需实现"可变部分"。

📌 在你的场景里

不同策略类(Strategy)虽然业务处理逻辑不同,但它们的 总体调用流程 却非常相似:

获取数据(不同策略的数据源可能不一样:数据库、API 或缓存)

判空(统一逻辑)

加工数据(每个策略各自不同)

设置到响应对象

于是你把这个公共流程提炼到一个抽象基类里 (AbstractWtwrChartStrategy),里面写了:

Java

@Override

public final void handleChartData(WaferMovingChartReq request, WaferMovingChartVO response) {

List dataList = fetchData(request); // 交给子类

if (CollectionUtils.isEmpty(dataList)) { // 统一空处理

return;

}

doHandle(request, response, dataList); // 交给子类

}

子类就只需要:

fetchData → 各自实现从哪里取数据

doHandle → 各自实现怎么加工数据

📌 优点

代码复用:避免不同策略中都写一遍 if (empty) return;...

清晰边界:父类管流程,子类管细节。

强制一致性:所有策略必须遵循统一的执行流程,不会有人忘了判空。

👉 模板方法模式解决的核心是:统一流程控制,让子类只关心差异点。

🎯 两者结合的价值

在这个场景里,策略模式 和 模板方法模式 是组合使用的:

策略模式 → 保证了灵活性:每种 Chart 类型独立成策略,可以随时扩展/替换。

模板方法模式 → 保证了规范性:即便策略再多,它们都遵循同样的处理流程。

可以这样理解:

策略模式 决定 挑哪个厨师来做菜(ModuleTime、ProcessingTime、WaferMove)。

模板方法模式 决定 厨师做菜的流程必须相同(取菜→检查→切配→出菜),但每个厨师可以选择买菜市场、配料方式不同。

结果是:

你既能"随便换厨师"(策略模式),又能"保证所有厨师做菜方式靠谱一致"(模板方法模式)。

------灵活 + 规范,两全其美 ✨

🎯 总结对比

总结:
策略模式让你能"横向扩展"不同算法,模板方法模式让你能"纵向统一"它们的流程

所以,在这个项目里,它们一起解决了"既要扩展多种 Chart 策略,又要统一流程规范"的问题。

类图

解读

Strategy 模式部分

WtwrChartStrategy 是策略接口(定义所有策略统一行为)。

ModuleTimeStrategy、ProcessingTimeStrategy、WaferMoveStrategy 都是策略的不同实现(不同业务逻辑)。

Template Method 模式部分

AbstractWtwrChartStrategy 是一个"骨架":

定义了 handleChartData() 的固定执行流程(不可更改,final)。

定义了两个抽象方法 fetchData & doHandle,交给子类实现。

各具体策略在继承时,只需关心 怎么取数据 和 怎么加工数据。

两种模式结合的妙处

策略模式:解决"选择哪个策略类来处理数据"。

模板方法模式:解决"所有策略类内部流程一致,差异点由子类填补

相关推荐
彭于晏Yan3 小时前
Spring Boot中策略模式结合依赖注入的实现方式
spring boot·策略模式
宁静致远20213 小时前
【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·策略模式
Meteors.1 天前
23种设计模式——策略模式 (Strategy Pattern)详解
设计模式·策略模式
谢栋_2 天前
设计模式从入门到精通之(六)策略模式
设计模式·bash·策略模式
CHEN5_022 天前
【CouponHub项目开发】使用RocketMQ5.x实现延时修改优惠券状态,并通过使用模板方法模式重构消息队列发送功能
java·重构·模板方法模式·项目
小蜗牛在漫步2 天前
23种设计模式-模板方法模式
设计模式·模板方法模式
Nerd Nirvana2 天前
C++编程——异步处理、事件驱动编程和策略模式
开发语言·c++·策略模式·嵌入式开发·事件驱动·异步处理
快乐非自愿2 天前
掌握设计模式--模板方法模式
java·设计模式·模板方法模式
成都被卷死的程序员3 天前
策略模式 + 工厂模式
策略模式