模板方法模式
字数: 0 字 时长: 0 分钟
简介
模板方法模式(Template Method Pattern)核心思想是:在一个方法中定义好算法的整体流程结构,把一些具体步骤延迟到子类中去实现。在父类中确定好流程大纲,而子类来实现具体步骤。能够复用通用流程的代码,又能灵活地定制细节。
UML 类图
- 抽象类(AbstractClass):定义模板方法和基本流程框架,声明一些抽象操作让子类实现
- 具体子类(ConcreteClass):实现父类定义的抽象步骤,完成子类特有的具体逻辑
实现示例
以“订单处理流程”为例,订单处理通用流程为:
java
// 1. 定义模板方法
class OrderProcessTemplate {
// 模板方法,定义订单处理的步骤
public final void processOrder() {
checkStock();
pay();
deliver();
notifyCustomer();
}
// 校验库存,父类统一实现
protected void checkStock() {
System.out.println("校验库存");
}
// 支付,交由子类具体实现
protected abstract void pay ();
// 发货,交由子类具体实现
protected abstract void deliver ();
// 通知客户,父类统一实现
protected void notifyCustomer() {
System.out.println("通知客户订单处理完成");
}
}
// 2. 根据实体商品和虚拟商品分别实现
class RealProductOrder extends OrderProcessTemplate {
@Override
protected void pay() {
System.out.println("实物商品支付逻辑");
}
@Override
protected void deliver() {
System.out.println("实物商品发货逻辑");
}
}
class VirtualProductOrder extends OrderProcessTemplate {
@Override
protected void pay() {
System.out.println("虚拟商品支付逻辑");
}
@Override
protected void deliver() {
System.out.println("虚拟商品发货逻辑");
}
}
// 3. 调用示例
public static void main(String[] args) {
OrderProcessTemplate realOrder = new RealProductOrder();
realOrder.processOrder();
OrderProcessTemplate virtualOrder = new VirtualProductOrder();
virtualOrder.processOrder();
}