Java设计模式 之 回调模式 企业实战

笔者在写这篇文章前看来一堆关于回调模式的博客,但是都是皮毛不适用于企业级开发。

计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码引用。这一设计允许了底层代码调用在高层定义的子程序

定义:所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。

我们先从实战举例:

1.定义一个回调接口:

public interface HandleCallBack {

    /** 参数校验 */
    public void checkParams();

    /** 执行待处理操作,比如模型的创建,修改,删除等 */
    public void process();

}

里面定义了需要执行的2个接口方法,参数校验与执行操作。

2.定义一个处理模板类:定义静态方法,可以直接模板调用

public class HandleTemplate {

    /** logger */
    private static final Logger logger     = Logger.getLogger(LoggerNames.TestLogger);

    /**
     * 执行(调用者要实现回调)[执行器]
     * @param result            结果(可以对结果进行处理)
     * @param callBack          回调
     */
    public static <T> void execute(Object result, HandleCallBack callBack) {
       
        try {
            // 1.执行业务参数校验
            {
            Profiler.enter("执行参数校验")
                try {
                    callBack.checkParams();
                } finally {
                    Profiler.release();
                }
            }
            // 2. 执行业务操作
            {
                Profiler.enter("执行业务操作");
                try {
                    callBack.process();
                } finally {
                    Profiler.release();
                }
            }

            //业务处理成功
            setResultSuccessResultCode(result);

        }catch(Exception e){
       LoggerUtil.warn(logger, e);
      setResult(result, e,true);
    }
      }
3.直接在需要用的地方直接通过静态调用即可,完成业务处理

HandleTemplate.execute(orderResult, new HandleCallBack() {
    /**
     * @see HandleCallBack#checkParams()
     */
    @Override
    public void checkParams() {
        {
            // 这里只判断是否为空,每个字段的校验下
            // 沉到通用校验组件里
            checkNotNull(testRequest, tsetContext);

            // 检查产品码是否有效
            checkProductValid(testRequest);
        }
    }

    /**
     * @see HandleCallBack#process()
     */
    @Override
    public void process() {
     
        try {

            // 获取事务,默认仅有引擎层事务
            TransactionTemplateRouter.getTransactionTemplate()
                .execute(new TransactionCallbackWithoutResult() {

                    /**
                     * @see TransactionCallbackWithoutResult#doInTransactionWithoutResult(TransactionStatus)
                     */
                    @Override
                    protected void doInTransactionWithoutResult(TransactionStatus status) {
                        execute(testContext);
                    }
                });

        } 
       
});

在上述的代码中可以看到, 模板调用了回调, 在里面调用了事务的回调函数。代码显得非常漂亮。







  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值