策略模式

定义

定义一组算法,将每个算法都封装起来,并且使它们之间可以互换

策略模式有三个角色

1.Strategy 抽象策略角色

策略,算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。

2.ConcreteStrategy具体策略角色

实现抽象策略中的操作,该类含有具体的算法

3.Context封装角色

也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略。算法的直接访问,封装可能存在的变化

抽象的策略角色

public interface Strategy {//策略模式的运算法则public void doSomething)();
}

具体策略角色

public class ConcreteStrategy1 implements Strategy {public void doSomething(){System.out.println("具体的策略1");}
}public class ConcreteStrategy2 implements Strategy {public void doSomething(){System.out.println("具体的策略2");}
}

封装角色

public class Context {//抽象策略private Strategy strategy = null;//构造函数设置具体策略public Context(Strategy _strategy){this.strategy = _strategy;}//封装后的策略方法public void doAnything(){this.strategy.doSomething();}
}

策略模式的优点

1.算法可以自由切换

2.避免使用多重条件判断

3.扩展性良好

缺点

1.策略数量增多

2.所有的策略都需要对外暴露

使用场景

多个类只有在算法或行为上稍有不同的场景

算法需要自由切换的场景

需要屏蔽算法规则的场景

因为算法太多了,很多时候只需要知道一个名字,传递相关参数,反馈一个结果就行了

注意事项

如果系统中的一个策略家族的具体策略数量超过4个,则需要考虑使用混合模式,解决类膨胀和对外暴露的问题

《设计模式之禅》-策略模式相关推荐

  1. 设计模式之禅-策略模式

    1 策略模式有点类似状态模式,不过策略的调用链切换是固定的. A  A can not do -> B B can not do -> C do 2 代码 #include <ios ...

  2. 读设计模式之禅--策略模式

    定义:定义一组算法,将每个算法都封装起来,并且使它们之间可以互换. package design.Strategy;/*** @Author: hyh* @Date: 2021/8/19 14:04* ...

  3. 设计模式之禅——策略模式(Strategy Pattern)

    1.基本概念 在策略模式中,一个类的行为或算法可以在运行时更改.我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象.策略对象改变 context 对象的执行算法. 2. ...

  4. 读书 | 设计模式之禅 - 策略模式

    文章目录 1. 引入策略模式 2. 策略模式定义 3. 策略模式的优点 1. 引入策略模式 智谋无敌的诸葛亮,在刘备去东吴招亲之前,特授以伴郎赵云三个锦囊,说是按天机拆开解决棘手问题. 这三个妙计分别 ...

  5. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  6. 设计模式入门(策略模式)

    [0]README 0.1)本文部分文字描述转自 "head first 设计模式",旨在学习 设计模式入门(策略模式) 的基础知识: 0.2)本文章节4和5的source cod ...

  7. 【设计模式七之策略模式】你有你的张良计,我有我的过墙梯

    Strategy模式 细说策略模式 策略模式究竟是什么模式 策略模式的场景 官宣的策略模式 代码展示 代码一 细说策略模式 提示: 博主:章飞 _906285288的博客 博客地址:http://bl ...

  8. 设计模式 之美 -- 策略模式

    策略模式作为行为型设计模式中的一种,主要封装相同功能的不同实现算法,用于在用户程序内部灵活切换.对用户来说能够快速替换对应的算法,能够让算法的实现独立于使用的用户. 基本的UML类图如下: 用户使用S ...

  9. Java设计模式之十一 ---- 策略模式和模板方法模式

    前言 在上一篇中我们学习了行为型模式的访问者模式(Visitor Pattern)和中介者模式(Mediator Pattern).本篇则来学习下行为型模式的两个模式,策略模式(Strategy Pa ...

  10. 《研磨设计模式》chap17 策略模式(2) 总结

    1. 新增加context 上下文类 eg. 发工资:发人民币和发美元 public interface PaymentStrategy {//公司给某人真正支付工资 public void pay( ...

最新文章

  1. 交换器无法根据自身类型和路由键找到符合条件队列时,有哪些处理?
  2. mysql 从裤3523_MySQL出现3523错误分析
  3. 正式发布!中国首个LF Edge捐赠项目Baetyl 2.2发布
  4. apollo修改配置刷新bean_技术文档丨Apollo软件概述
  5. SAP UI5 Library Resource Bundle 的设计原理
  6. Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(2) - 总线封锁/缓存封锁
  7. NeHe OpenGL教程 第四十五课:顶点缓存
  8. TensorFlow神经网络(一)前向传播
  9. Python3解决modulenotfounderror: no module named‘_bz2‘
  10. Java 枚举(enum)剖析
  11. Web基础配置篇(四): Mysql的配置及使用
  12. 智能制造专业就业方向
  13. [转]UserData使用总结 - lanyu
  14. 2021年flutter开发宝淘买菜前后端源码-免费开源
  15. ZIP文件夹解压小程序
  16. MongoDB 学习笔记八 复制、分片、备份与恢复、监控
  17. premiere pr 自动调色对比度 用法
  18. 在线影视网站分享(持续更新)
  19. js写的一个html游戏向导模块
  20. Sparse Transformers

热门文章

  1. detailview的控件基础
  2. 【大数据存储技术】实验2:MongoDB数据库的部署和操作
  3. videojs实现视频列表 点击播放下个视频
  4. scrapy模拟点击
  5. android+考研助手,安卓考研助手问题总结及改进规划是什么
  6. OpenCV对TBB的支持
  7. 点云PCD和PLY区别
  8. 珍藏5个在线免费接收国内外手机短信验证码的网络服务
  9. 哈工程计算机系保研率,武汉理工VS哈工程,20保研率哈工程高,哪所值得考?学长精准分析...
  10. Django-rest-framework简介