博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
策略模式学习
阅读量:6229 次
发布时间:2019-06-21

本文共 723 字,大约阅读时间需要 2 分钟。

定义

策略模式是对象行为模式的一种

定义三要素:

  • 一组不同的算法(策略),各有优劣
  • 实现了同一接口,之间可以互相替换
  • 在不同的业务场景下,调用方依据业务决定调用哪种策略(不同的场景下对同一行为有不同的实现)

uml类图

类图

优缺点

优点:

  • 易于切换(李氏替换原则)
    由于策略类都实现同一个接口,所以使它们之间可以自由切换。
  • 易于扩展(开闭原则)
    增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“
  • 提供了管理相关的算法族的办法。
  • 提供了可以替换继承关系的办法。
  • 可以避免使用多重条件转移语句

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 有可能产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量

应用场景

以下几种场景

  • 一个系统需要动态地在几种算法中选择一种的情况
  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
  • 如果一个对象有很多的行为,如果不使用合适的模式,这些行为就只好使用多重的if-else语句来实现,此时,可以使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象涉及的概念。
  • 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。

在jdk中的应用

  • ThreadPoolExecutor中的四种拒绝策略

    • AbortPolicy
    • DiscardPolicy
    • DiscardOldestPolicy
    • CallerRunsPolicy
  • Comparator
  • FilenameFilter

转载地址:http://rixna.baihongyu.com/

你可能感兴趣的文章
估计一些物品的质量_大部分物流运输管理中心都会派送的物品里应用了rfid
查看>>
分数的大小比较优秀教案_20分钟如何写好教师资格证面试教案?
查看>>
纵向取模需要自己倒叙吗_婚后的女人需要努力吗?看完这四点,每个人都会有自己的答案...
查看>>
导入公用方法_销售明细导入开票模块的产品思考
查看>>
主从切换_SpringBoot 多数据源配置+动态数据源切换+多数据源事物配置实现主从数据库存储分离...
查看>>
变形 圆形_「Photoshop教程」使用变形工具和扭曲滤镜实现极坐标照片效果
查看>>
如何使用 mega unity_MEGA构建系统发育树,以及EvolView & iTOL 的入门心得.
查看>>
华三交换机mode是什么意思_弱电工程师忘记了交换机和路由器的密码后如何处理?...
查看>>
2019 coling 论文列表_COLING2020-事件抽取/关系抽取/NER/少(零)样本 论文分类整理
查看>>
培养逻辑思维的app_数学逻辑思维app哪个好
查看>>
word加载外接程序出错_COM加载项的常见异常
查看>>
冒烟的意思_【冒烟】的意思是什么?【冒烟】是什么意思?
查看>>
os什么意思python_Python中import os是什么意思?
查看>>
初识python评课稿_GitHub - jingning42/ustc-course: USTC 评课平台
查看>>
html弄多个按钮_HTML表单上的多个提交按钮 - 将一个按钮指定为默认按钮
查看>>
django判断checkbox是否选中_django视图层之请求与响应
查看>>
group by 怎么用java对象接收_生产服务宕机,线上业务挂了!Promtheus 怎么又不报警了呢?...
查看>>
himawari-8卫星叶绿素a产品、_走过50年,看“风云”眼中的世界| 卫星看中国特别版...
查看>>
mybatis使用$报空指针_打破你的认知!Java空指针居然还能这样玩,90%人不知道…...
查看>>
windows mysql 重置root密码_在Windows下Mysql如何重置root用户密码
查看>>