博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式:学习笔记(13)——策略模式
阅读量:5019 次
发布时间:2019-06-12

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

设计模式:学习笔记(13)——策略模式

业务场景

  完成一项任务有多种方式,每一种方式都是一种策略,我们有时候需要根据环境或者条件的不同选择不同的策略来完成该项任务。以读取数据来说,有许多算法可以完成同一种功能,比如从文件、缓存、服务器等,但他们的解决途径各不相同,从而提高系统的灵活性和扩展性,此时可以使用策略设计模式来使得系统可以灵活地选择解决途径。

  

  策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy)。

模式结构

  策略模式包含如下角色:

  • Context: 环境类,就是调用读取策略的环境。
  • Strategy: 抽象策略类,如上图的读取策略
  • ConcreteStrategy: 具体策略类,就是上图中的从文件中读取策略、从服务器读取策略等

  

 

时序图

  从时序图可以看出,首先需要在环境类注册策略类,然后环境类调用读取方法时,具体的策略就会执行相应的操作,从而实现灵活性

  

 

模式分析

  策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。

  策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中“退休”的方便,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性,但是客户端需要理解所有具体策略类之间的区别,以便选择合适的算法,这也是策略模式的缺点之一,在一定程度上增加了客户端的使用难度

 

参考文献

  • https://design-patterns.readthedocs.io/zh_CN/latest/behavioral_patterns/strategy.html

转载于:https://www.cnblogs.com/MrSaver/p/11387848.html

你可能感兴趣的文章
mix-blend-mode
查看>>
解决 Electron 包下载太慢问题
查看>>
jquery里面获取div区块的宽度与高度
查看>>
JS 循环练习
查看>>
C# XML对象序列化、反序列化
查看>>
关于window.onload()的加载问题
查看>>
计算机接口技术简概
查看>>
转载:设计模式6大原则
查看>>
php深入浅出session
查看>>
页面缓冲显示正在加载图片
查看>>
C#中的索引器(Indexers)
查看>>
干货 | 自适应大邻域搜索(Adaptive Large Neighborhood Search)入门到精通超详细解析-概念篇...
查看>>
SCI中et al. 和etc.的区别
查看>>
Kubernetes解决了Docker使用中的哪些问题?
查看>>
GB28181实现H265 H264摄像头 Web端无插件直播
查看>>
[转载]Linux用户管理全攻略(一)
查看>>
操作系统--设备管理
查看>>
java web 开发分页功能
查看>>
SE 2014年5月22日
查看>>
HDUOJ---3743Frosh Week(BIT+离散化)
查看>>