定义

The Strategy pattern

The strategy pattern defines a family of algorithms encapsulate each one, and makes them interchangeable. Strategy lets algorithm vary independently from clients that use it.

策略模式

策略模式定义了一系列的算法,分别封起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户.

说明

简单的来说,对于一个接口,有多种实现。这些实现可以自由替换,不会影响其它客户的调用.

图示

列举的是游泳的例子,游泳有好几种游法,一个人在游泳时可以蝶泳,蛙泳,仰泳等等,所以将游泳这个行为抽成一个接口,下面依次蝶泳,蛙泳,仰泳的实现。而Person类直接引用游泳接口,可以在运行时通过设置swimable来动态的改变游泳的方式。

总结

策略模式是一个提倡“针对接口编程”的模式,而使用接口的目的是为了统一标准或着说是制定一种强行的规定。

策略模式的使用是由用户发起的,根据用户的操作决定使用什么具体的策略角色。策略模式仅仅封装算法,提供新的算法加入到已有系统和算法间的相互替换.

转载于:https://www.cnblogs.com/51cto/archive/2009/03/16/1413303.html

设计模式学习01-策略模式相关推荐

  1. 设计模式学习01策略模式记录

    (个人记录)策略模式带来的好处就是更加的有弹性,可以很方便的动态改变对象的行为,在已经固定的项目中如果要增加新的类型,在项目中我们要分析变化部分与不变部分. 将变化的部分(也就是策略算法)使用接口的方 ...

  2. 设计模式学习:策略模式

    策略模式简介 策略模式:策略模式是一种行为型模式,它将对象和行为分开,将行为定义为 一个行为接口 和 具体行为的实现.策略模式最大的特点是行为的变化,行为之间可以相互替换.每个if判断都可以理解为就是 ...

  3. 设计模式学习之策略模式(Strategy,行为型模式)(13)

    转载地址:http://www.cnblogs.com/zhili/p/StragetyPattern.html 一.引言 本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方 ...

  4. [设计模式学习笔记] -- 策略模式

    策略模式 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 举一个简单的例子来描述策略模式. 设计一款冷兵器时代士兵打仗的游戏,游戏内部设计要使用OO技术. ...

  5. Java-马士兵设计模式学习笔记-策略模式-模拟Comparable接口

    一.情况 1.目标:要在专门用于排序数据的DataSorter.java中实现对所有A类,B类,C类,D类等等的排序 2.初步想法:DataSorter.java的代码如下 public class ...

  6. Java设计模式学习 - 模版方法模式策略模式

    个人博客项目地址 希望各位帮忙点个star,给我加个小星星✨ 设计模式-模板方法&策略模式 简单介绍 模板方法模式(Template):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. ...

  7. 设计模式学习笔记——策略(Strategy)模式

    设计模式学习笔记--策略(Strategy)模式 @(设计模式)[设计模式, 策略模式, Stategy] 设计模式学习笔记策略Strategy模式 基本介绍 策略案例 类图 实现代码 Hand类 S ...

  8. No2.大话设计模式学习之策略、装饰、代理模式

    No2.大话设计模式学习之策略.装饰.代理模式 2.设计模式-part1 2.1.策略模式 描述:策略模式(Strategy Pattern)指同系列算法家族,内部都遵从算法家族的接口及方法规范 原则 ...

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

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

  10. 设计模式 - 学习笔记 - 工厂模式Factory Pattern

    设计模式 - 学习笔记 - 工厂模式Factory Pattern 1. 简单工厂 1.1 应用场景 1.2 UML 1.3 优劣分析 好处 缺点 1.4 代码示例 抽象产品 AbstractProd ...

最新文章

  1. “学了半年后,我要揭开Python 3宗罪!”
  2. Spring Boot 参考指南(使用NoSQL技术)
  3. 《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic构建和部署》——2.2 容器式Linux系统的Docker配置...
  4. window中常用的命令
  5. material mem
  6. The first curriculum design experiment report in spring 2019
  7. mysql扩展使用_mysql的扩展应用
  8. 企业shell面试题:获取51CTO博客列表按时间倒序排序
  9. 教你开发jQuery插件(转)
  10. 前端学习(537):多列布局4横跨多列
  11. 【EMNLP 2020】篇章要素识别和篇章结构评分(上)
  12. 实施工程师是干嘛的_CTO大怒:300万建设数据中台,啥也没看见,我要它干嘛?...
  13. 运维中常用Linux命令及运维工具
  14. 软通动力:致力智慧城市与大数据协同发展
  15. 雷电2接口_Steinberg 发布旗舰级 32 bit / 384 kHz 雷电 2 音频接口 AXR4
  16. 项目jar包启动的命令
  17. 服务器信号满格但网速很慢,信号满格网速太慢是什么原因,网速慢是什么原因-...
  18. 统帅转型:轻时尚时代挺进年轻领地
  19. 在Chrome、Firefox、IE、360等多种浏览器中实现二代证阅读功能
  20. 通俗易懂的epoll

热门文章

  1. 手把手教你从0-1做一张酷炫驾驶舱,让老板对你赞不绝口
  2. Python+BI爬取3000条车厘子数据,发现了这些秘密
  3. FineBI与FineReport对比
  4. 当我们写Controller时,VisitRefer注解是干什么的。
  5. ceq c matlab,求一个函数MATLAB的编程,求大神指教。
  6. python黑色背景白色背景_用Python去除图像的黑色或白色背景实例
  7. vue导入音乐_现在哪个软件听音乐完全免费?
  8. 第4讲 李群与李代数
  9. DeBruijin DFS
  10. ~~欧几里得算法(附模板题)