资讯专栏INFORMATION COLUMN

策略模式学习

adam1q84 / 444人阅读

摘要:可以避免使用多重条件转移语句缺点客户端必须知道所有的策略类,并自行决定使用哪一个策略类。不希望客户端知道复杂的与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。在中的应用中的四种拒绝策略

定义

策略模式是对象行为模式的一种
定义三要素:

一组不同的算法(策略),各有优劣

实现了同一接口,之间可以互相替换

在不同的业务场景下,调用方依据业务决定调用哪种策略(不同的场景下对同一行为有不同的实现)

uml类图

优缺点

优点:

易于切换(李氏替换原则)
由于策略类都实现同一个接口,所以使它们之间可以自由切换。

易于扩展(开闭原则)
增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“

提供了管理相关的算法族的办法。

提供了可以替换继承关系的办法。

可以避免使用多重条件转移语句

缺点

客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

有可能产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量

应用场景

以下几种场景

一个系统需要动态地在几种算法中选择一种的情况

如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为

如果一个对象有很多的行为,如果不使用合适的模式,这些行为就只好使用多重的if-else语句来实现,此时,可以使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象涉及的概念。

不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。

在jdk中的应用

ThreadPoolExecutor中的四种拒绝策略

AbortPolicy

DiscardPolicy

DiscardOldestPolicy

CallerRunsPolicy

Comparator

FilenameFilter

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71644.html

相关文章

  • 慕课网_《模式的秘密之策略模式学习总结

    时间:2017年08月31日星期四说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学源码:https://github.com/zccodere/s...学习源码:https://github.com/zccodere/s... 第一章:策略模式简介 1-1 简介 课程大纲 什么是策略模式 策略模式如何实现 策略模式总结篇 实例案例分享 日常生活中的策略 Wor...

    zhongmeizhi 评论0 收藏0
  • JavaScript设计模式学习策略模式

    摘要:什么是策略模式策略模式,就是将不同的算法各自封装起来,然后根据程序的不同情况,采用不同的算法,有点像工厂模式。在其他语言中,实现这样的思路也比较费劲,而得函数非常灵活,本来可以当值传递,所以实现策略模式非常轻松,也很灵活。 什么是策略模式 策略模式,就是将不同的算法各自封装起来,然后根据程序的不同情况,采用不同的算法,有点像工厂模式。比如在很多种情况下,都要写ifXXX dosomet...

    snifes 评论0 收藏0
  • 策略模式学习

    摘要:策略模式在构造方法或方法中初始化各自需要的策略模式代码策略接口具体策略具体策略上下文抽象类我理解的这个类的作用是负责策略与用户使用者的连接,也是策略模式的入口持有一个具体策略的对象构造函数,传入一个具体策略对象策略方法具体环境类应用场景多个 策略模式UML:showImg(https://segmentfault.com/img/bVbdrhV?w=999&h=499); Contex...

    boredream 评论0 收藏0
  • Python学习之路25-使用一等函数实现设计模式

    摘要:本篇主要讲述中使用函数来实现策略模式和命令模式,最后总结出这种做法背后的思想。 《流畅的Python》笔记。本篇主要讲述Python中使用函数来实现策略模式和命令模式,最后总结出这种做法背后的思想。 1. 重构策略模式 策略模式如果用面向对象的思想来简单解释的话,其实就是多态。父类指向子类,根据子类对同一方法的不同重写,得到不同结果。 1.1 经典的策略模式 下图是经典的策略模式的U...

    econi 评论0 收藏0
  • PHP设计模式系列之入门

    摘要:设计模式系列之入门设计模式是一套被反复使用多数人知晓的经过分类编目的代码设计经验的总结。毫无疑问,设计模式于己于他人于系统都是多赢的设计模式使代码编制真正工程化设计模式是软件工程的基石脉络,如同大厦的结构一样。 PHP设计模式系列之入门 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易...

    animabear 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<