java的钩子方法

JAVA设计模式之-模板方法+(钩子函数)

1.定义

允许子类对父类的一个或多个步骤进行重写。例如聚合支付场景中有很多共同的步骤,比如验签、四要素验证、风控等等,但是在支付的时候走不同的渠道可能在调用和参数上有很大的不同,比如有的是xml,有的是json,等等。 我们就可以用父类实现通用的逻辑,由子类实现不同的交互逻辑。

2.模板方法+钩子函数示例

顶层接口 BasePay

public interface BasePay {
    //移动支付
    void mobilePay();
}

抽象类 AbstractBasePay

public abstract class AbstractBasePay implements BasePay {

    @Override
    public final void mobilePay() {
        // 钩子函数
        if (isCheckAuth()) {
            checkAuth();
        }
        checkParam();
        chenckRisk();
        channlPay();
    }

    private void checkParam() {
        System.out.println("检查参数");
    }
    
    private void checkAuth() {
        System.out.println("支付权限校验");
    }
    
    private void chenckRisk() {
        System.out.println("风控校验");
    }
    
    //渠道支付
    abstract void channlPay();
    
    //钩子函数,子类可以覆写,来选择手开启支付权限校验  默认不开启
    boolean isCheckAuth() {
        return true;
    }
}

具体实现 1 中金支付

public class CPCNchannelPay extends AbstractBasePay{

    @Override
    void channlPay() {
        System.out.println("中金支付");
    }
    
    boolean isCheckAuth() {
        return false;
    }
}

具体实现2 阿里支付

public class AliChannelPay extends AbstractBasePay{

    @Override
    void channlPay() {
        System.out.println("阿里pay");
    }

}

运行及结果

public class TestPay {
    public static void main(String[] args) {
        System.out.println("--中金支付start");    
        BasePay pay1 = new CPCNchannelPay();
        pay1.mobilePay();
        System.out.println("--中金支付end");    

        
        System.out.println("--阿里paystart");    
        BasePay pay2 = new AliChannelPay();
        pay2.mobilePay();
        System.out.println("--阿里payend");    

    }
}

结果:

复制代码
–中金支付start
检查参数
风控校验
中金支付
–中金支付end

–阿里paystart
支付权限校验
检查参数
风控校验
阿里pay
–阿里payend

我们可以看到中金支付中,我们把钩子返回设置成了false ,就没有进行支付权限校验

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值