下面是一个简单的示例代码:
- 定义抽象订单处理模板类 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);
}
- 创建具体的订单处理类 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);
}
}
- 在其他地方注入 CustomOrderTemplate 并调用 processOrder 方法来处理订单:
import org.springframework.stereotype.Service;
@Service
public class OrderService {
@Autowired
private CustomOrderTemplate customOrderTemplate;
public void handleOrder(String orderId) {
customOrderTemplate.processOrder(orderId);
}
}