[java之设计模式]策略模式
2024-08-25 13:33:58
策略模式(strategy pattern)
定义>>
将一系列的算法封装到一些列的类里面,并且可以相互替换
作用>>
将算法的变化独立于客户端,将算法的指责和算法的行为分开,将算法的使用和具体的算法流程区分开
组成>>
策略类:封装了一个算法实现;一般只暴漏一个方法供其它地方调用,比如排序,查找,计算折扣等等
抽象策略类:既然一种算法代表一个策略类,那么多种算法就需要定义多个策略类,这些策略类的共性是只暴漏了一个方法,而且算法的职责是相似的,算法的步骤可能是大不相同的。这个时候就可以定义一个抽象的策略类(可以是抽象类,也可以是个接口),来包装各个策略类,而这些策略类也需要继承/抽象定义好的抽象策略类 。
图例>>
优缺点>>
优点:对“开闭原则”的完美支持,在不修改原有系统的基础上更换算法或者增加新的算法,避免多重条件转移语句的实现方式;
缺点:客户端必须知道所有的策略类,并理解其区别;一定程度上增加了系统中类的个数,可能存在多个策略类
实例>>
例子:
- 书城要打折,不同种类的书都有不同的折扣。怎么设计返回书价的接口?
- 比较策略:比如要比一个人牛逼不牛逼,可以通过能力,颜值,财富等等各个方面;每个方面都可以生成一个比较器;AblityComparator impements Comparator; Collections是环境角色;
- 排序策略:比如自己实现一个排序器,作为一个排序策略的抽象接口;然后由实现类充当各个排序策略(与比较策略比较相似,可以进行联想记忆)
- ThreadPoolExecutor中的四个拒绝策略;抽象接口是RejectedExecutionHandler, 四个实现策略:ThreadPoolExecutor.AbortPolicy, ThreadPoolExecutor.DiscardPolicy, ThreadPoolExecutor.DiscardOldestPolicy, ThreadPoolExecutor.CallerRunsPolicy;ThreadPoolExecutor是环境角色
最新文章
- 流程控制和循环.png
- Aspose.Cells 导出 excel
- 初学js
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
- Spring day04笔记(SVN讲解和回顾昨天知识)
- Android各个版本 版本号对应关系表
- 让你的PHP程序真正的实现多线程(PHP多线程类)(转)
- C++ STL map
- VCS仿真生成fsdb文件(Verilog)
- UVA11090 Going in Cycle!! (二分+SPFA推断有无负权)
- Android4.0 Design之UI设计缺陷1
- java synchronized内置锁的可重入性和分析总结
- 针对Mac的DuckHunter攻击演示
- 【SqlServer】SqlServer中的计算列
- 5.0-uC/OS-III时间管理
- Python函数学习
- IO多路复用 IO异步
- spring(读取外部数据库配置信息、基于注解管理bean、DI)
- 网络对抗——web基础
- java添加templates模板,httpServlet模板改写