Java设计模式25策略模式.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Java设计模式25策略模式.pdf》由会员分享,可在线阅读,更多相关《Java设计模式25策略模式.pdf(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第25章策略模式主讲教师:程细柱主讲教师:程细柱 韶关学院计算机系本书主编:刘韶关学院计算机系本书主编:刘 伟伟 清华大学出版社清华大学出版社本章教学内容?策略模式?模式动机与定义模式动机与定义?模式结构与分析模式结构与分析?模式实例与解析模式实例与解析?模式效果与应用模式效果与应用?模式扩展模式扩展策略模式?模式动机模式动机?完成一项任务完成一项任务,往往可以,往往可以有多种不同的方式有多种不同的方式,每一种方式称为一个策略每一种方式称为一个策略,我们,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务可以根据环境或者条件的不同选择不同的策略来完成该项任务。?在软件开发中在软件开发中
2、也常常遇到类似的情况也常常遇到类似的情况,实现某一个功能有多个途径实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。策略模式?模式动机策略模式?模式动机模式动机?在软件系统中,有许多算法可以实现某一功能,如查找、排序等,在软件系统中,有许多算法可以实现某一功能,如查找、排序等,一种常用的方法一种常用的方法是是硬编码硬编码(Hard Coding)在一个类中,在一个类中,如如需要需要提供多种查找算法提供多种查找算法,可以将这些算法写到一个类中可
3、以将这些算法写到一个类中,在该类中提供多个方法,在该类中提供多个方法,每一个方法对应一个具体的查找算法;每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过当然也可以将这些查找算法封装在一个统一的方法中,通过ifelse等条件判断语句来进行选择等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码。这两种实现方法我们都可以称之为硬编码。?缺点是:缺点是:如果需要增加一种新的查找算法,需要修改封装算法类的源代码如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。;更换查找算法,也需要修改客户端调用代码。在这个
4、算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。策略模式?模式动机模式动机?除了提供专门的查找算法类之外,除了提供专门的查找算法类之外,还可以在客户端程序中直接包含算法代码还可以在客户端程序中直接包含算法代码,这种做法更不可取,这种做法更不可取,将导致客户端程序庞大而且难以维护将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重。,如果存在大量可供选择的算法时问题将变得更加严重。?为了解决这些问题为了解决这些问题,可以定义一些独立的类来封装不同的算法,每一个类封装一个具体的算法可以定义一些
5、独立的类来封装不同的算法,每一个类封装一个具体的算法,在这里,在这里,每一个封装算法的类我们都可以称之为策略每一个封装算法的类我们都可以称之为策略(Strategy),为了保证这些策略的一致性,一般会用一个,为了保证这些策略的一致性,一般会用一个抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策略类抽象的策略类来做算法的定义,而具体每种算法则对应于一个具体策略类。策略模式?模式定义模式定义?策略模式策略模式(Strategy Pattern):定义一系列算法定义一系列算法,将每一个算法封装起来将每一个算法封装起来,并让它们,并让它们可以相互替换可以相互替换。策略模式让算法独立于使用它
6、的客户而变化策略模式让算法独立于使用它的客户而变化,也称为,也称为政策模式政策模式(Policy)。策略模式是一种。策略模式是一种对象行为型对象行为型模式。模式。策略模式?模式定义模式定义?Strategy Pattern:Define a family of algorithms,encapsulate each one,and make them interchangeable.Strategy lets the algorithm vary independently from clients that use it.?Frequency of use:medium high策略模式?模
7、式结构strategyContext-strategy:Strategy+algorithm()Strategyabstract+algorithm()ConcreteStrategyA+algorithm()ConcreteStrategyB+algorithm().strategy.algorithm();.策略模式?模式结构模式结构?策略模式包含如下角色:策略模式包含如下角色:Context:Context:环境类环境类 Strategy:Strategy:抽象策略类抽象策略类 ConcreteStrategy:ConcreteStrategy:具体策略类具体策略类策略模式?模式分析模式
8、分析?策略模式是一个比较容易理解和使用的设计模式,策略模式是一个比较容易理解和使用的设计模式,策略模式策略模式是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。是对算法的封装,它把算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常策略模式通常把一个系列的算法封装到一系列的策略类里面把一个系列的算法封装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来说,就是,作为一个抽象策略类的子类。用一句话来说,就是“准备一组算法,并将每一个算法封装起来,准备一组算法,并将每一个算法封装起来,使得它们可以互换使得它们可以互换”。策略模式?模式分析模式分析?不使用策略模
9、式的代码:不使用策略模式的代码:public class Context public void algorithm(String type).if(type=strategyA)/算法算法A else if(type=strategyB)/算法算法B else if(type=strategyC)/算法算法C .策略模式?模式分析?重构之后的重构之后的抽象策略类:抽象策略类:public abstract class AbstractStrategy public abstract void algorithm();策略模式?模式分析?重构之后的重构之后的具体策略类:具体策略类:public
10、 class ConcreteStrategyA extends AbstractStrategy public void algorithm()/算法算法A 策略模式?模式分析?重构之后的重构之后的环境类:环境类:public class Context private AbstractStrategy strategy;public void setStrategy(AbstractStrategy strategy)this.strategy=strategy;public void algorithm()strategy.algorithm();策略模式?模式分析?客户端代码片段:客户
11、端代码片段:Context context=new Context();AbstractStrategy strategy;strategy=new ConcreteStrategyA();context.setStrategy(strategy);context.algorithm();策略模式?模式分析模式分析?在策略模式中,应当在策略模式中,应当由客户端自己决定由客户端自己决定在什么情况下在什么情况下使用什么具体策略角色使用什么具体策略角色。?策略模式仅仅封装算法,提供新算法插入到已有系统中策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中以及老算法从系统中“退休退休”
12、的方便的方便,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。这在一定程度上提高了系统的灵活性,但是客户端需要理解所有具体策略类之间的区别,以便选择合适的算法但是客户端需要理解所有具体策略类之间的区别,以便选择合适的算法,这也是策略模式的,这也是策略模式的缺点之一缺点之一,在一定程度上增加了客户端的使用难度。,在一定程度上增加了客户端的使用难度。策略模式?策略模式实例与解析策略模式实例与解析?实例一:排序策略实例一:排序策略 某系统提供了一个用于对数组数据进行操作的类,该类封装了某系统
13、提供了一个用于对数组数据进行操作的类,该类封装了对数组的常见操作对数组的常见操作,如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数组操作类,使得客户端可以动态地更换排序算法,可以根据需要选择,如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数组操作类,使得客户端可以动态地更换排序算法,可以根据需要选择冒泡排序冒泡排序或或选择排序选择排序或或插插入排序入排序,也能够灵活地增加新的排序算法。,也能够灵活地增加新的排序算法。策略模式?策略模式实例与解析?实例一:排序策略实例一:排序策略sortObjArrayHandler-sortObj:Sor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 设计 模式 25 策略
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内