模板方法模式(Template Method Pattern)是行为型设计模式之一,它定义了一个算法的骨架(即模板),并将一些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。
java
/**
* 支付流程模板类 - 定义统一的支付处理流程
*/
public abstract class PaymentProcessTemplate {
/**
* 模板方法 - 定义支付处理的整体流程
* 使用final修饰,确保子类不能修改流程结构
*/
public final void processPayment(double amount) {
validateAmount(amount);
authenticateUser();
deductFunds(amount);
generateReceipt(amount);
notifyResult();
}
/**
* 验证金额
*/
private void validateAmount(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("支付金额必须大于0");
}
System.out.println("验证支付金额:" + amount);
}
/**
* 用户认证 - 由子类实现
*/
protected abstract void authenticateUser();
/**
* 扣款处理 - 由子类实现
*/
protected abstract void deductFunds(double amount);
/**
* 生成凭证 - 可选钩子方法
*/
protected void generateReceipt(double amount) {
// 默认实现,子类可根据需要重写
System.out.println("生成支付凭证,金额:" + amount);
}
/**
* 通知结果 - 可选钩子方法
*/
protected void notifyResult() {
// 默认实现发送通知
System.out.println("支付结果通知已发送");
}
}
java
/**
* 支付宝支付处理器 - 实现具体的支付宝支付流程
*/
public class AlipayPaymentProcessor extends PaymentProcessTemplate {
@Override
protected void authenticateUser() {
System.out.println("使用支付宝账号进行人脸识别认证");
System.out.println("获取支付宝授权令牌");
}
@Override
protected void deductFunds(double amount) {
System.out.println("调用支付宝API扣除资金:" + amount);
System.out.println("更新支付宝账户余额");
}
@Override
protected void generateReceipt(double amount) {
super.generateReceipt(amount);
System.out.println("生成支付宝电子发票");
}
}
java
/**
* 微信支付处理器 - 实现具体的微信支付流程
*/
public class WechatPayPaymentProcessor extends PaymentProcessTemplate {
@Override
protected void authenticateUser() {
System.out.println("使用微信扫码进行身份验证");
System.out.println("确认微信支付密码");
}
@Override
protected void deductFunds(double amount) {
System.out.println("调用微信支付接口扣款:" + amount);
System.out.println("更新微信钱包余额");
}
@Override
protected void notifyResult() {
System.out.println("通过微信服务号推送支付成功通知");
}
}
java
/**
* 支付客户端 - 演示模板方法模式的使用
*/
public class PaymentClient {
public static void main(String[] args) {
// 处理支付宝支付
PaymentProcessTemplate alipayProcessor = new AlipayPaymentProcessor();
System.out.println("=== 处理支付宝支付 ===");
alipayProcessor.processPayment(99.9);
System.out.println();
// 处理微信支付
PaymentProcessTemplate wechatpayProcessor = new WechatPayPaymentProcessor();
System.out.println("=== 处理微信支付 ===");
wechatpayProcessor.processPayment(199.9);
}
}