- 1、本文档共11页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
题目:Java设计模式-策略模式姓名:苏欣雨学号:2014141463173老师:高伟老师Java设计模式-策略模式苏欣雨2014141463173定义策略(Strategy)模式:又名Policy,设计模式的作者把策略模式定义如下:Define a family of algorithms, encapsulate each one, and make them interchangeable. [The] Strategy [pattern] lets the algorithm vary independently from clients that use it.即:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而变化。其体现了这样两个原则——封装变化和对接口编程而不是对实现编程。策略模式可以独立于使用他们的客户端而变化。结构抽象策略(Strategy)角色:抽象策略角色由抽象类或接口来承担,它给出具体策略角色需要实现的接口;具体策略(ConcreteStrategy)角色:实现封装了具体的算法或行为;场景(环境)(Context)角色:持有抽象策略类的引用。设计原则开闭原则策略模式是开闭原则的体现,开闭原则讲的是一个软件实体应该对扩展开放对修改关闭。策略模式在新的策略增加时,不会影响其他类的修改,增加了扩展性,也就是对扩展是开放的;对于场景来说,只依赖于抽象,而不依赖于具体实现,所以对修改是关闭的。封装变化原则策略模式在设计时是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(C++中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。策略模式重点就是封装不同的算法和行为,不同的场景下可以相互替换。也就是说如果一个程序的每个场景的算法相同也就没有必要使用策略模式了。优缺点优点将整个软件构建为可互换部分的松耦合的集合,而不是单一的紧耦合系统。在遵守大部分GRASP原则和常用设计原则的同时实现了高内聚,低耦合,使得软件可扩展性更好,更易于维护且重用性好提供管理相关算法族的方法提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)可以避免多重条件判断语句的使用缺点客户端必须知道所有的策略类由于类的增多,是系统需要进行维护的类更多应用举例刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开能解决棘手问题,最后使周瑜赔了夫人又折兵,那咱们先看看这个场景是什么样子的。先说说这个场景中的要素:三个妙计,一个锦囊,一个赵云。在不同的场景下赵云打开不同的锦囊,便化险为夷,锦囊便是抽象策略,具体的锦囊里面的计策便是具体的策略角色,而他们变化的处境就是不同的场景即环境。源代码及注释示例一三个妙计是同一类型的东西,所以写一个接口:packagecom.yangguangfu.strategy; /** * * @author trygf521@126.com: * 首先定义一个策略接口,这是诸葛亮老人家给赵云的三个锦囊妙计的接口。 */ public interface IStrategy { //每个锦囊妙计都是一个可执行的算法。public void operate(); } 然后再写三个实现类,因为有三个妙计,即用三种不同的算法:妙计一:初到吴国:packagecom.yangguangfu.strategy; /** * * @author trygf521@126.com: * 找乔国老帮忙,使孙权不能杀刘备。 */ public class BackDoor implements IStrategy { @Override public void operate() { System.out.println(找乔国老帮忙,让吴国太给孙权施加压力,使孙权不能杀刘备...); } } 妙计二:求吴国太开个绿灯,放行:packagecom.yangguangfu.strategy; /** * * @author trygf521@126.com: * 求吴国太开个绿灯。 */ public class GivenGreenLight implements IStrategy { @Override public void operate() { System.out.println(求吴国太开个绿灯,放行!); } } 妙计三:孙夫人断后,挡住追兵:packagecom.yangguangfu.strategy; /** *
文档评论(0)