SlideShare a Scribd company logo
主讲人     张龙



All Rights Reserved
• 策略模式(Strategy Pattern)中体现了
  两个非常基本的面向对象设计的原则
 – 封装变化的概念
 – 编程中使用接口,而不是对接口的实现


• 面向接口的编程
• 策略模式的定义
 – 定义一组算法,将每个算法都封装起来,并且
   使它们之间可以互换。
 – 策略模式使这些算法在客户端调用它们的时候
   能够互不影响地变化
• 策略模式的意义
 – 策略模式使开发人员能够开发出由许多可替换
   的部分组成的软件,并且各个部分之间是弱连
   接的关系。
 – 弱连接的特性使软件具有更强的可扩展性,易
   于维护;更重要的是,它大大提高了软件的可
   重用性
• 策略模式的组成
 – 抽象策略角色:策略类,通常由一个接口或者
   抽象类实现
 – 具体策略角色:包装了相关的算法和行为
 – 环境角色:持有一个策略类的引用,最终给客
   户端调用的。
• 策略模式的实现
 – 策略模式的用意是针对一组算法,将每一个算
   法封装到具有共同接口的独立的类中,从而使
   得它们可以相互替换。
 – 策略模式使得算法可以在不影响到客户端的情
   况下发生变化。使用策略模式可以把行为和环
   境分割开来。
 – 环境类负责维持和查询行为类,各种算法则在
   具体策略中提供。由于算法和环境独立开来,
   算法的修改都不会影响环境和客户端
• 策略模式的编写步骤
 – 1.对策略对象定义一个公共接口。
 – 2.编写策略类,该类实现了上面的公共接口
 – 3.在使用策略对象的类中保存一个对策略对
   象的引用。
 – 4.在使用策略对象的类中,实现对策略对象
   的set和get方法(注入)或者使用构造方法完
   成赋值
• 参看JDK Collections类的源代码
• 实现自己的策略模式
• 策略模式的缺点
 – 1.客户端必须知道所有的策略类,并自行决定
   使用哪一个策略类。
 – 2.造成很多的策略类。
• 解决方案
 – 采用工厂方法

More Related Content

More from ArBing Xie (20)

PDF
[圣思园][Java SE]Swing
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 15
ArBing Xie
 
PDF
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
ArBing Xie
 
PDF
[圣思园][Java SE]Ooad与uml lesson 2
ArBing Xie
 
PDF
[圣思园][Java SE]Observer
ArBing Xie
 
PDF
[圣思园][Java SE]Network
ArBing Xie
 
PDF
[圣思园][Java SE]Jdk5
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 22
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 21
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 20
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 17
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 16
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 13
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 12
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 11
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 9
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 8
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 5
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 4
ArBing Xie
 
PDF
[圣思园][Java SE]Java se lesson 2
ArBing Xie
 
[圣思园][Java SE]Swing
ArBing Xie
 
[圣思园][Java SE]Java se lesson 15
ArBing Xie
 
[圣思园][Java SE]Websphere.application.developer(wsad)使用外置win cvs解决方案
ArBing Xie
 
[圣思园][Java SE]Ooad与uml lesson 2
ArBing Xie
 
[圣思园][Java SE]Observer
ArBing Xie
 
[圣思园][Java SE]Network
ArBing Xie
 
[圣思园][Java SE]Jdk5
ArBing Xie
 
[圣思园][Java SE]Java se lesson 22
ArBing Xie
 
[圣思园][Java SE]Java se lesson 21
ArBing Xie
 
[圣思园][Java SE]Java se lesson 20
ArBing Xie
 
[圣思园][Java SE]Java se lesson 17
ArBing Xie
 
[圣思园][Java SE]Java se lesson 16
ArBing Xie
 
[圣思园][Java SE]Java se lesson 13
ArBing Xie
 
[圣思园][Java SE]Java se lesson 12
ArBing Xie
 
[圣思园][Java SE]Java se lesson 11
ArBing Xie
 
[圣思园][Java SE]Java se lesson 9
ArBing Xie
 
[圣思园][Java SE]Java se lesson 8
ArBing Xie
 
[圣思园][Java SE]Java se lesson 5
ArBing Xie
 
[圣思园][Java SE]Java se lesson 4
ArBing Xie
 
[圣思园][Java SE]Java se lesson 2
ArBing Xie
 

[圣思园][Java SE]Strategy

  • 1. 主讲人 张龙 All Rights Reserved
  • 2. • 策略模式(Strategy Pattern)中体现了 两个非常基本的面向对象设计的原则 – 封装变化的概念 – 编程中使用接口,而不是对接口的实现 • 面向接口的编程
  • 3. • 策略模式的定义 – 定义一组算法,将每个算法都封装起来,并且 使它们之间可以互换。 – 策略模式使这些算法在客户端调用它们的时候 能够互不影响地变化
  • 4. • 策略模式的意义 – 策略模式使开发人员能够开发出由许多可替换 的部分组成的软件,并且各个部分之间是弱连 接的关系。 – 弱连接的特性使软件具有更强的可扩展性,易 于维护;更重要的是,它大大提高了软件的可 重用性
  • 5. • 策略模式的组成 – 抽象策略角色:策略类,通常由一个接口或者 抽象类实现 – 具体策略角色:包装了相关的算法和行为 – 环境角色:持有一个策略类的引用,最终给客 户端调用的。
  • 6. • 策略模式的实现 – 策略模式的用意是针对一组算法,将每一个算 法封装到具有共同接口的独立的类中,从而使 得它们可以相互替换。 – 策略模式使得算法可以在不影响到客户端的情 况下发生变化。使用策略模式可以把行为和环 境分割开来。 – 环境类负责维持和查询行为类,各种算法则在 具体策略中提供。由于算法和环境独立开来, 算法的修改都不会影响环境和客户端
  • 7. • 策略模式的编写步骤 – 1.对策略对象定义一个公共接口。 – 2.编写策略类,该类实现了上面的公共接口 – 3.在使用策略对象的类中保存一个对策略对 象的引用。 – 4.在使用策略对象的类中,实现对策略对象 的set和get方法(注入)或者使用构造方法完 成赋值
  • 10. • 策略模式的缺点 – 1.客户端必须知道所有的策略类,并自行决定 使用哪一个策略类。 – 2.造成很多的策略类。
  • 11. • 解决方案 – 采用工厂方法