欢迎来到天天文库
浏览记录
ID:44665033
大小:78.00 KB
页数:4页
时间:2019-10-24
《软件体系结构与设计模式__策略模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、软件体系结构与设计模式策略模式策略模式(别名:政策)策略模式是一个很简单的模式,也是一个很常用的模式。它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式应用的原则就是:找到系统中变化的部分,将变化的部分同其它稳定的部分隔开。面向接口编程,而不要面向实现编程优先考虑使用对象组合,而不是类继承。—、概述策略模式是处理算法的不同变体的一种成熟模式,策略模式通过接口或抽象类封装算法的标识,即在接口屮定义一个抽象方法,实现该接口的类将实现接口屮的抽象方法。策略模式定义了一系列的算法,并将每一个算法
2、封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。减少了各种算法类与使用算法类之间的耦合。在策略模式屮,封装算法标识的接口称作策略,实现该接口的类称作具体策略。二、策略模式的结构与使用(-)策略模式的结构中包括三种角色:1、抽象策略角色(Strategy)2、具体策略角色(ConcreteStrategy)3、环境角色(Context)下图2-1为策略模式的UML类图表示图2-1策略模式的UML类图(二)策略模式的结构的描述与使用下面的例子利用策略模式在排序对象屮封装了不同的排序算法,这样以便允许客户端动态的替换排序策略(包括Qu
3、icksort、Shellsort和Mergesort)o1.抽象策略(Strategy)://"Strategy/zabstractclassSortStrategy{//MethodsabstractpublicvoidSort(ArrayListlist);}2.具体策略(ConcreteStrategy):(1)//ConcreteStrategyz/classQuicksort:SortStrategy{//Methodspub1icoverridevoidSort(ArrayListlist){list.Sort();Console.WriteLi
4、ne(z,QuickSortcdIist“);}}(2)//"ConcreteStrategy"classShcllSort:SortStrategy{//MethodspublicoverridevoidSort(ArrayListlist){list.She)ISort();Console.WriteLineC'ShelISortedlist");1.环境策略:publicclassGymnasticsGame{ComputableStrategystrategy;publicvoidsetStrategy(ComputableStrategystrate
5、gy){this.strategy二strategy;}publicdoublegetPersonScore(double[]a){if(strategy!=null)returnstrategy・computeScore(a);elsereturn0;}}三、策略模式的优点提供了一种替代继承的方法,而且既保持了继承的优点(代码重用)还比继承更灵活(算法独立,可以任意扩展)。避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。由于每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。上下
6、文(Context)和具体策略(ConcreteStrategy)是松耦合关系。因此上下文只知道它要使用某一个实现Strategy接口类的实例,但不需要知道具体是哪一个类。策略模式满足“开-闭原则”。当增加新的具体策略时,不需要修改上下文类的代码,上下文就可以引用新的具休策略的实例。四、适合使用策略模式的情景一个类定义了多种行为,并且这些行为在这个类中以多个条件语句的形式出现,可以使用策略模式避免在类中使用大量的条件语句。程序不需要暴露复杂的、与算法相关的数据结构,可以使用策略模式封装算法,需要使用一个算法的不同变体。在下面的情况下应当考虑使用策略模式:1.如
7、果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。2.一个系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则,客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。3.一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。4.如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只
8、好使用多重的条件选择语句来实现。此时,
此文档下载收益归作者所有