模板方法模式(Template Method Pattern)

模板方法模式(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);
    }
}
相关推荐
沛沛老爹6 分钟前
Skills高级设计模式(一):向导式工作流与模板生成
java·人工智能·设计模式·prompt·aigc·agent·web转型
__万波__2 小时前
二十三种设计模式(二十二)--策略模式
java·设计模式·策略模式
Overt0p3 小时前
抽奖系统(6)
java·spring boot·redis·设计模式·rabbitmq·状态模式
__万波__3 小时前
二十三种设计模式(二十三)--责任链模式
java·设计模式·责任链模式
帅次4 小时前
系统设计方法论全解:原则、模型与用户体验核心要义
设计模式·流程图·软件工程·软件构建·需求分析·设计规范·规格说明书
蔺太微4 小时前
装饰器模式(Decorator Pattern)
设计模式·装饰器模式
reddingtons13 小时前
【游戏宣发】PS “生成式扩展”流,30秒无损适配全渠道KV
游戏·设计模式·新媒体运营·prompt·aigc·教育电商·游戏美术
sxlishaobin15 小时前
设计模式之桥接模式
java·设计模式·桥接模式
晴殇i19 小时前
package.json 中的 dependencies 与 devDependencies:深度解析
前端·设计模式·前端框架
HL_风神1 天前
设计原则之单一职责原则
c++·学习·设计模式·单一职责原则