当前位置: 首页 > ai >正文

【设计模式】责任链+模板+工程模式使用模板

前言

方便写出优雅,解耦,高内聚,高复用的代码。

Demo

// 1. 定义验证器接口(责任链模式)
public interface Validator {Validator setNext(Validator next);boolean validate(Data data);
}// 2. 创建抽象验证器(模板方法模式)
public abstract class AbstractValidator implements Validator {protected Validator next;@Overridepublic Validator setNext(Validator next) {this.next = next;return next;}@Overridepublic boolean validate(Data data) {// 模板方法定义验证流程boolean result = doValidate(data);// 如果当前验证通过且有下一个验证器,继续验证if (result && next != null) {return next.validate(data);}return result;}// 子类实现具体验证逻辑protected abstract boolean doValidate(Data data);
}// 3. 实现具体验证器
public class FormatValidator extends AbstractValidator {@Overrideprotected boolean doValidate(Data data) {return data != null && data.getFormat().equals("valid");}
}public class RangeValidator extends AbstractValidator {@Overrideprotected boolean doValidate(Data data) {return data.getValue() > 0 && data.getValue() < 100;}
}// 4. 创建验证器工厂(工厂模式)
public class ValidatorFactory {public static Validator createValidatorChain() {Validator formatValidator = new FormatValidator();Validator rangeValidator = new RangeValidator();// 构建验证器链formatValidator.setNext(rangeValidator);return formatValidator;}
}// 5. 客户端使用
Validator validator = ValidatorFactory.createValidatorChain();
boolean isValid = validator.validate(new Data("valid", 50));

三、解析

  • 这里的工厂设计模式主要用来构建责任链是怎么链的。和策略+工厂模式有所不同,策略+工厂模式的工程模式是为了根据一个 Code 获取哪个策略。

  • 结合模板设计模式主要是为了干掉重复的代码,每个单独的子类可能有很多公共的代码,这时候增加模板设计模式就会优雅很多。

http://www.xdnf.cn/news/8045.html

相关文章:

  • indicator-sysmonitor 在Ubuntu 右上角实时显示CPU/MEM/NET的利用率
  • C#对集合进行分组IGroupingout TKey, out TElement>
  • 01. Qt介绍及Qt开发环境搭建(2025.05最新官网下载方式)
  • C++初阶-list的使用2
  • AI编程: OpenAI Codex vs Google Jules vs GitHub Copilot++
  • 5G 核心网切换机制全解析:XN、N2 与移动性注册对比
  • 初步尝试AI应用开发平台——Dify的本地部署和应用开发
  • 精益数据分析(77/126):问题-解决方案画布——创业团队的周度聚焦与迭代利器
  • GuzzleHttp和DomCrawler的具体用途?
  • HJ33 整数与IP地址间的转换【牛客网】
  • Flutter生物识别认证之Flutter指纹认证Flutter人脸认证
  • 养生指南:五维守护身心健康
  • HTML应用指南:利用POST请求获取全国中通快递服务网点位置信息
  • 【大模型面试每日一题】Day 26:从伦理角度,大模型可能存在哪些潜在风险?技术上如何实现内容安全控制(如RLHF、红队测试)?
  • JVM 高质量面试题
  • 利用GeoTools实现导出MySQL地理数据表为shp格式
  • Spring Task
  • 中科方德鸳鸯火锅平台使用教程:轻松运行Windows应用!
  • 网页 CSS美化(详解)
  • 养生新策:五维开启健康生活
  • 远程访问软件如何开启? 怎样让外网访问本地数据库服务?
  • C语言if-else分支结构中的类似短路现象
  • 蓝牙BLE协议之——PHY层
  • 力扣-长度最小的子数组
  • vscode包含工程文件路径
  • uni-app(3):互相引用
  • GEE数据下载问题记录
  • 第十节第六部分:常见API:DateTimeFormatter、Period、Duration
  • 数据仓库工具箱第三版——读书笔记(未完)
  • IO原理与高性能网络编程深度剖析