策略模式(学习笔记)

原创 2012年03月29日 18:35:48

策略模式

策略模式,更多体现的是一种思想。

适用场景(个人理解):

当解决一个问题时,有很多种解决方法(这种方法就称之为算法或策略),你需要根据不同的场景或者运行情况来决定使用哪种方法,或者使用哪种方法,要交给客户端来决定。这时,你最好把解决这个问题的方法抽象为一个接口或一个抽象类。不同的解决方法来实现这个接口或继承这个抽象类。而不是把多种方法都写在一个类中。

uml图如下:



         这样做的好处是显而易见的,如果你要增加一种解决问题的方法,加一个类就好了。如果你把这些方法都放在一个类中,修改时显而易见的违反了开闭原则。

Context是什么?

Context就是需要使用到你这些策略的那个类,他可以是一个负责生产这些策略的简单工厂(使用简单工厂模式)。也可以是一个使用这些策略的客户端。

应用举例:

学习过Swing技术的人一定很熟悉java中布局方式,Java的布局管理器(LayoutManager),应用的就是策略模式:


 

周志华《机器学习》笔记:第3章 线性模型

本章概括 从最简单但也是最基础的线性模型开始研究。线性模型虽然简单,但却是基础。先研究线性、单属性的线性回归问题,在此基础上研究非线性、多属性的回归和分类问题。 第3章 线性模型 单属性...
  • yzqzoom
  • yzqzoom
  • 2016年07月10日 12:11
  • 3111

深度增强学习之Policy Gradient方法1

1 前言 在之前的深度增强学习系列文章中,我们已经详细分析了DQN算法,一种基于价值Value的算法,那么在今天,我们和大家一起分析深度增强学习中的另一种算法,也就是基于策略梯度Policy G...
  • AMDS123
  • AMDS123
  • 2017年04月19日 16:15
  • 9522

周志华《Machine Learning》学习笔记(17)--强化学习

上篇主要介绍了概率图模型,首先引出概率图模型的基本概念;接着分别介绍了隐马尔可夫模型、马尔可夫随机场、条件随机场、精确推断方法以及LDA模型:HMM围绕着评估/解码/学习三个问题展开论述;MRF基于团...
  • u011826404
  • u011826404
  • 2017年07月20日 19:52
  • 3380

HeadFirst 设计模式学习笔记1--策略模式Demo

  • 2010年05月12日 11:17
  • 16KB
  • 下载

策略模式——HeadFirst学习笔记

1、策略模式: 定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户; 2、设计工具箱中解锁的工具: 面向对象设计基础:抽象、封装、多态、继承 面向对象原...
  • siyonggang226
  • siyonggang226
  • 2015年11月16日 23:17
  • 238

JAVA学习笔记(6)_____Java 策略模式 Strategy Pattern

策略模式Strategy Pattern   在Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator,或者创建比较器传入Collections的静态方法中作为方法参数,进行比...
  • ke7in1314
  • ke7in1314
  • 2014年07月30日 17:07
  • 381

设计模式学习笔记之策略模式

参考:《Head first 设计模式》,部分引用来自 http://www.cnblogs.com/colinsong/archive/2009/03/02/1401723.html 策略...
  • ccnyou
  • ccnyou
  • 2012年08月14日 21:35
  • 570

设计模式学习笔记(四):策略模式【Strategy】

刘备要到江东娶老婆了,走之前诸葛亮给赵云
  • yegucheng2618
  • yegucheng2618
  • 2014年06月18日 09:17
  • 263

设计模式学习笔记——策略模式

定义 策略模式——定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互转换。此模式让算法的变化独立于使用算法的客户。 使用场景 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。...
  • AndrLin
  • AndrLin
  • 2017年04月06日 20:35
  • 214

[学习笔记]设计模式[0]-{策略模式}

设计原则找出应用中可能需要变化的地方,把它们独立出来,不要和不需要变化的代码混在一起感觉这个就是整个设计模式的最主要的目标。不用在下个版本的开发的时候去修改上个版本的代码,以增量的形式去增加功能或模块...
  • u012468264
  • u012468264
  • 2017年01月09日 17:18
  • 124
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:策略模式(学习笔记)
举报原因:
原因补充:

(最多只允许输入30个字)