设计模式-模板方法模式

72 阅读1分钟

下面是一个简单的示例代码:

  1. 定义抽象订单处理模板类 OrderTemplate:
import org.springframework.beans.factory.annotation.Autowired;

public abstract class OrderTemplate {

    @Autowired
    private PaymentService paymentService;

    public void processOrder(String orderId) {
        // 获取订单信息
        Order order = getOrderInfo(orderId);

        // 计算订单金额
        double totalAmount = calculateTotalAmount(order);

        // 支付订单
        paymentService.payOrder(orderId, totalAmount);

        // 发货
        deliverGoods(orderId);
    }

    protected abstract Order getOrderInfo(String orderId);

    protected abstract double calculateTotalAmount(Order order);

    protected abstract void deliverGoods(String orderId);
}
  1. 创建具体的订单处理类 CustomOrderTemplate 继承自 OrderTemplate,并实现具体的业务逻辑:

@Component
public class CustomOrderTemplate extends OrderTemplate {

    @Override
    protected Order getOrderInfo(String orderId) {
        // 根据orderId查询数据库获取订单信息
        return orderRepository.findById(orderId).orElse(null);
    }

    @Override
    protected double calculateTotalAmount(Order order) {
        // 计算订单总金额逻辑
        return order.getPrice() * order.getQuantity();
    }

    @Override
    protected void deliverGoods(String orderId) {
        // 发货逻辑
        System.out.println("发货成功:" + orderId);
    }
}
  1. 在其他地方注入 CustomOrderTemplate 并调用 processOrder 方法来处理订单:
import org.springframework.stereotype.Service;

@Service
public class OrderService {

    @Autowired
    private CustomOrderTemplate customOrderTemplate;

   public void handleOrder(String orderId) {
       customOrderTemplate.processOrder(orderId);
   }
}