Java设计模式学习总结(9)——结构型模式之过滤器模式(标准模式)

本文总结了Java设计模式中的结构型模式之一——过滤器模式(标准模式)。通过创建Person对象,定义Criteria接口及其实现类,演示如何利用Criteria对象过滤Person对象列表,实现灵活的过滤标准组合。
过滤器模式 Filter Pattern )或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来。这种类型的设计模式属于结构型模式,它结合多个标准来获得单一标准。
实现

我们将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤 Person 对象的列表。Criteria

### 软件体系结构风格与软件设计模式的区别与联系 #### 1. 定义上的差异 - **软件体系结构风格**是指一组描述系统的组织方式和交互模型的概念框架。它定义了系统的基本构成要素以及这些要素之间的关系[^1]。例如,“管道-过滤器”风格强调数据流经一系列独立的处理单元;“客户端-服务器”风格则关注请求/响应模式下的职责分配。 - **软件设计模式**则是针对特定场景下反复出现的问题提供经过验证解决方案模板的方法论集合[^2]。比如工厂方法模式解决了创建对象实例时灵活性不足的问题,观察者模式实现了事件驱动编程的核心机制。 #### 2. 层次的不同 两者虽然都属于高层次抽象范畴但侧重点有所区别: - 架构风格更偏向于宏观层面考虑整个应用乃至多个相互关联的应用群组间的关系布局; - 设计模式聚焦微观内部实现细节方面如类之间如何协作完成某项功能等具体事务处理流程安排等问题解答。 因此可以说前者决定了后者所处环境条件约束范围内的适用性边界所在位置在哪里而已并非完全对立排斥关系而是相辅相成共同促进良好质量特性达成目标效果体现出来才行得通的道理啊! --- #### 3. 应用场合对比分析表 | 特性 | 软件体系结构风格 | 软件设计模式 | |--------------------|-----------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| | 主要解决的问题 | 描述整体应用程序或家族成员共有的特征及其运行原理 | 针对某一类别常见挑战给出通用型可复用代码片段 | | 影响范围 | 整个项目生命周期贯穿始终 | 单独模块或者函数级别内局部优化 | | 表达形式 | 文档图表相结合的形式呈现 | UML图配合伪码说明 | | 生命周期阶段 | 初期规划阶段即需确立 | 编码调试期间随时调用 | --- #### 4. 实际案例解析 假设我们要开发一款在线购物平台,则可以选择微服务作为其总体技术路线(这便是采用了某种特定类型的架构样式),而在每一个单独的服务内部又可以根据实际情况灵活选用不同的GoF经典二十三种之一来进行编码实践工作——比如说为了简化商品分类管理部分的操作难度就可以引入策略模式来封装各种排序规则等等情况均有可能发生哦~ ```java // Java示例:使用单例模式确保配置文件加载器只有一个实例存在 public class ConfigLoader { private static volatile ConfigLoader instance; public static synchronized ConfigLoader getInstance() { if(instance == null){ synchronized(ConfigLoader.class){ if(instance==null){ instance=new ConfigLoader(); } } } return instance; } // 私有构造防止外部new对象 private ConfigLoader(){} } // Python示例:通过装饰器模式增强原有函数的功能而不改变其实现本身 def logging_decorator(func): def wrapper(*args,**kwargs): print(f"Calling function '{func.__name__}' with arguments {args} and keyword arguments {kwargs}.") result=func(*args,**kwargs) print(f"'{func.__name__}' returned value:{result}") return result return wrapper @logging_decorator def add(a,b): """Add two numbers.""" return a+b print(add(5,7)) # 输出日志信息的同时返回加法运算结果 ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大海的江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值