Skip to content

模板方法模式

字数: 0 字 时长: 0 分钟

简介

模板方法模式(Template Method Pattern)核心思想是:在一个方法中定义好算法的整体流程结构,把一些具体步骤延迟到子类中去实现。在父类中确定好流程大纲,而子类来实现具体步骤。能够复用通用流程的代码,又能灵活地定制细节。

UML 类图

template.webp

  • 抽象类(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();
}