架构设计方法总结

函数式接口 + 模板方法

函数式接口 + 模板方法的组合,将继承关系转变为组合关系:

固定流程由模板方法(execute 或 run)统一封装;

可变行为通过函数式接口参数传入,无需新建子类;

以xxljob任务实现为例。

  • 函数式接口
java 复制代码
@FunctionalInterface
public interface JobExecutor {
    /**
     * 执行任务核心逻辑
     */
    ReturnT<String> execute(String param) throws Exception;
}
  • 模板方法
java 复制代码
// 固定流程,非核心逻辑
@Slf4j
@Component
public class JobExecuteTemplate {
    
    /**
     * 模板方法:固定执行流程,业务逻辑通过函数式接口参数注入
     */
    public static ReturnT<String> execute(String jobName, JobExecutor executor) {
        long startTime = System.currentTimeMillis();
        String param = null;
        
        try {
            // 1. 统一获取参数
            param = XxlJobHelper.getJobParam();
            log.info("[{}] 任务开始执行,参数: {}", jobName, param);
            
            // 2. 执行业务逻辑(由调用方通过 Lambda 传入)
            ReturnT<String> result = executor.execute(param);
            
            // 3. 处理成功结果
            XxlJobHelper.handleSuccess(result.getMsg());
            log.info("[{}] 任务执行成功,耗时: {}ms", jobName, System.currentTimeMillis() - startTime);
            return result;
            
        } catch (Exception e) {
            // 4. 统一异常处理
            log.error("[{}] 任务执行失败,参数: {}", jobName, param, e);
            XxlJobHelper.handleFail("[{}] 执行失败: " + e.getMessage(), jobName);
            return new ReturnT<>(ReturnT.FAIL_CODE, e.getMessage());
            
        } finally {
            // 5. 统一记录耗时
            log.info("[{}] 任务执行结束,总耗时: {}ms", jobName, System.currentTimeMillis() - startTime);
        }
    }
}
  • 业务使用
java 复制代码
@XxlJob("cleanExpiredOrders")
public ReturnT<String> cleanExpiredOrders(String param) throws Exception {
    // 仅需传入任务名称和核心业务逻辑(Lambda 表达式)
    return JobExecuteTemplate.execute("清理过期订单", param -> {
        // 解析参数(JSON 格式)
        CleanOrderParam cleanParam = JSON.parseObject(param, CleanOrderParam.class);
        int count = orderService.cleanExpiredOrders(cleanParam.getDays());
        return ReturnT.SUCCESS;
    });
}
相关推荐
亿牛云爬虫专家11 天前
聊聊数据的“冷热分离“:如何对历史爬虫数据进行合理的归档与压缩存储?
爬虫·爬虫代理·架构设计·隧道代理·大数据处理·压缩存储·数据分层存放
在世修行12 天前
3D轮廓仪智能定位激光打标上位机:系统整体架构设计深度解析
上位机·架构设计·plc通信·3d轮廓仪·激光打标
零域码客13 天前
从 SQLite 到 PostgreSQL:轻量单机到分布式架构选型、避坑与迁移全解析
分布式·postgresql·sqlite·wal·架构设计·后端开发·数据库选型
阿图灵15 天前
Agentic AI 架构完整学习手册(课程精华全收录)
架构设计·ai agent·智能体·agentic ai·完整手册
AI人工智能+电脑小能手17 天前
大白话说Java设计模式-08-建造者模式(业务实战篇)
java·设计模式·建造者模式·架构设计·对象构建
AI人工智能+电脑小能手18 天前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
小当家.10518 天前
深入理解 ReAct Agent:从原理到 Java 实战
java·react.js·agent·react·架构设计·agent设计
黄俊懿19 天前
【架构师从入门到进阶】第五章:DNS&CDN&网关优化思路——第三节:CDN扩展-多地址直连
网络·计算机网络·架构·系统架构·cdn·dns·架构设计
doiito20 天前
【Agent Harness】Gliding Horse 最新升级:把“智能闭环”真正跑通的一次深度优化
rust·架构设计·系统设计·ai agent