我们正在 FtpOperationTemplate? 上执行方法 execute? 并且我们正在传递 lambda? 表达式 。我们将放入 lambda? 中的所有逻辑都将代替 ftpOperation.apply(ftpClient) 函数执行 。
3. 模板方法
- 创建一个抽象的模板类
@RequiredArgsConstructor@Slf4j@Serviceabstract class FtpOperationTemplate<T, K> {protected abstract K command(FTPClient ftpClient, T input) throws IOException;public K execute(FTPClient ftpClient, T input) {try {ftpClient.connect("host", 22);ftpClient.login("username", "password");return command(ftpClient, input);} catch (IOException ex) {log.error("Something went wrong", ex);throw new RuntimeException(ex);} finally {try {ftpClient.logout();ftpClient.disconnect();} catch (IOException ex) {log.error("Something went wrong while finally", ex);}}}}- 列出ftp目录listDirectories方法的实现
@Slf4j@Serviceclass FtpOperationListDirectories extends FtpOperationTemplate<String, FTPFile[]> {@Overrideprotected FTPFile[] command(FTPClient ftpClient, String input) throws IOException {return ftpClient.listDirectories(input);}}- 删除文件deleteFile方法的实现
@Slf4j@Serviceclass FtpOperationDeleteFile extends FtpOperationTemplate<String, Boolean> {@Overrideprotected Boolean command(FTPClient ftpClient, String input) throws IOException {return ftpClient.deleteFile(input);}}- 实现FtpProvider接口
@RequiredArgsConstructor@Slf4j@Servicepublic class FtpProviderTemplateImpl implements FtpProvider {private final FtpOperationTemplate<String, FTPFile[]> ftpOperationListDirectories;private final FtpOperationTemplate<String, Boolean> ftpOperationDeleteFile;private final FTPClient ftpClient;public FTPFile[] listDirectories(String parentDirectory) {return ftpOperationListDirectories.execute(ftpClient, parentDirectory);}public boolean deleteFile(String filePath) {return ftpOperationDeleteFile.execute(ftpClient, filePath);}}我们正在 FtpOperationTemplate? 上执行方法 execute? 并在那里传递我们的参数 。因此执行方法的逻辑对于 FtpOperationTemplate 的每个实现都是不同的 。总结我们现在来比较下上面种方式:
- @Aspect切面方式实现
- 函数式接口实现
- 模板方法实现
如果是你,你会选择哪种方式呢?还是有更好的方法?
【解决冗余代码的三种方法,让你的代码更上一层楼】
推荐阅读
- 如何编写高效的CSS代码?这五个技巧一定要知道!
- 云计算数据库的灾难恢复解决方案是如何演进的?
- Spring为什么使用三级缓存而不是两级解决循环依赖问题?
- ygomobile闪刀姬卡组导入 ygomobile卡组代码怎么用
- 数字视频压缩技术 视频压缩技术主要解决什么问题
- 笔记本黑屏后无法唤醒屏幕解决方法 电脑老是黑屏怎么处理
- 红星尔克股票代码?鸿星尔克有基金吗?
- 电脑自动重启频繁解决方法 win7电脑自动重启是什么原因
- 解决前列腺大问题 治疗前列腺炎肥大
- 硬盘无法格式化怎么办?电脑硬盘格式化不了的解决方法?
