欢迎来到天天文库
浏览记录
ID:46865243
大小:75.50 KB
页数:5页
时间:2019-11-28
《Strategy--策略模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Strategy-策略模式TheStrategyPatterndefinesafamilyofalgorithms,encapsulateseachone,andmakestheminterchangeable.Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit.••策略模式定义了一系列的算法,并将每一个算法封装起来,而几使它们还对以相互替换。策略模式让算法独立于使用它的客八而独立变化。前提:首先我们需要理解三个设计原则一:ldentifytheaspe
2、ctsofyourapplicationthatvaryandseparatethemfromwhatstaysthesame.俄到系统中变化的部分,将变化的部分同其它稳定的部分隔开。)二:Programtoaninterface,notanimplementation.(血向接口编程,而不要血向实现编程。)H:Favorcompositionoverinheritance.(优先使用对彖组合,而非类继承)…下面是策略模式的类图.Context(应用场景):•需耍使用ConcreteStrategy提供的算法。•内部维护一个
3、Strategy的实例。•负责动态设置运行时Strategy具体的实现算法。•负责跟StrategyZ间的交互和数据传递。Strategy(抽象策略类):•定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使川这个接口调用不同的算法,一•般使用接口或抽彖类实现。ConcreteStrategy(具体策略类):•实现了Strategy定义的接口,提供具体的算法实现。如图:Context是程序上下文,在Context中需要使用ConcreteStrategy方法.可是这个方法实现是变化的••程序需要针对不
4、同的客户需求决定不同的程序实现.为了不因为每一个需求去重写Context.我们可以抽象ConcreteStrategy方法•让它成为一个接口,由不同的实现类实现该接口(是的••这些类是描述行为的・・)・同时我们在context类中将ConcreteStrategy方法声明为属性.这样我们就可以在程序运行吋动态的决定ConcreteStrategy方法的实现了.程序模拟:应用场景和优缺点上血我们已经看过了Strategy模式的详细介绍,下血我们再來简单说说这个模式的优缺点吧!怎么说呢,人无完人,设计模式也不是万能的,每一个模式
5、都冇它的使命,也就是说只冇在特定的场景下才能发挥其功效。我们要使用好模式,就必须熟知各个模式的应用场景。对于Strategy模式來说,主要有这些应用场景:仁多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。(例如FlyBehavior和QuackBehavior)2、需耍在不同情况下使川不同的策略(算法),或者策略还可能在未來川莫它方式來实现。(例如FlyBehavior和QuackBehavior的具体实现可任意变化或扩充)3、对客户(Duck)隐藏具体策略(算法)的实现细节,彼此
6、完全独立。对于Strategy模式來说,主要有如下优点:1、提供了一种替代继承的方法,而且既保持了继承的优点(代码重川)还比继承更灵活(算法独立,可以任意扩展)。2、避免程序屮使用多重条件转移语句,使系统更灵活,并易于扩展。3、遵守大部分GRASP原则和常用设计原则,高内聚、低偶合。对于Strategy模式來说,主要有如下缺点:1、因为每个具体策略类都会产生一个新类,所以会增加系统需要维护的类的数量。附:.NET框架里的应用Strategy模式的应用非常广泛,也许大家有意无意之间一直都在使用。这里举一个.NET框架里使用St
7、rategy模式的例了,象这样的例了其实还冇很多,只要大家细心体会就一定会发现的。如果写过程序,那么ArrayList类肯定祁会用过吧,那么它的Sort方法想必大家也一定不陌生了。Sort方法的定义如下:publicvirtualvoidSort(IComparercomparer)□J以看到Sort方法接收一个IComparer类型的参数,那么这个IComparer接口是做什么用的呢?下面我们看一段程序,下面的代码示例演示如何使用默认比较器和一个反转排序顺序的自定义比较器,对ArrayList中的值进行排序。(完全引自MS
8、DN:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/cpref2/html/M_SysternCollectionsArrayListSort1a2d90598.htm)1usingSystem;2usingSys
此文档下载收益归作者所有