1.策略模式的概念定义了一系列算法,将它们独立封装起来,这些算法可以相互替换。策略模式主要是管理一堆常用的算法,客户端可以根据需要快速切换这些算法,并保持可扩展性。策略模式的本质:分离算法,选择实现。2.策略模式的实现下面说一个策略模式的实现小例子。个人认为学习设计模式最好的方法是看设计模式的概念,然后先看简单模式实现的例子。策略模式的实现主要需要三个部分:抽象接口、实现算法、上下文。//算法接口publicinterfacePriceStrategy{publicintsetPrice(intorgPrice);}//实现30折产品接口publicclasssevenPercentStrategyimplementsPriceStrategy{ publicintsetPrice(intorgPrice){System.out.println("30%offproducts");returnorgPrice*0.7;}}//为50%折扣产品实现一个接口returnorgPrice*0.5;}}//实现一个上下文对象publicclassDstPrice{privatePriceStrategymPriceStrategy;publicvoidsetPriceMode(PriceStrategypriceMode){mPriceStrategy=priceMode;}publicintExeCalPrice(intprice){mPriceStrategy.SetPrice(price);}}上面就是策略模式最简单的实现,按照功能分为三部分,定义算法抽象接口,然后根据具体算法实现这些接口,最后需要定义一个上下文对象。这里的context对象主要是用来切换算法的。context对象也是为了接口编程,封装了具体的算法实现。3.策略模式的理解上面的实现只是策略模式最简单的框架。在实际应用中,我们可以根据不同的情况修改上下文对象和具体的算法实现。例如,可以添加抽象类实现作为算法模板。我们可以在抽象类中封装一些公共方法。当用这种方式实现一个特定的算法时,每个算法的公共部分是分开的。策略模式的目的是抽取具体的算法,将每个算法独立分离。形成一系列具有共同功能的算法组,然后这个算法组中的算法可以根据实际情况相互替换。策略模式的中心不是如何实现这些算法,而是如何组织和调用这些算法。也就是把我们平时一起写的算法独立解耦成一个模块,增强程序的可扩展性。策略模式中的算法通常需要数据执行,我们可以根据实际情况将数据放在不同的地方。比如可以放在上下文类中,然后每个算法都可以使用这个数据。或者为接口封装一个抽象类,在抽象类中添加数据。这些可以根据实际情况综合考虑。设计模式中没有静态模式,每个模式都有变化的版本,需要根据实际项目进行适配。4、策略模式的优缺点定义一系列算法:策略模式的作用是定义一系列算法,使这些算法可以相互替换。因此,会为这一系列算法定义一个公共接口,来约束一系列算法要实现的功能。如果这一系列算法有公共函数,可以将策略接口实现为一个抽象类,这些公共函数可以在父类中实现。关于这个问题,我们已经提到了三种处理方法,这里就不多说了。避免多重条件语句:根据前面的例子会发现,策略模式中的一系列策略算法是等价的,可以互换的,写在一起的时候通过if-else结构来组织。条件语句构成多个条件语句,使用策略模式可以避免这样的多个条件语句。更好的扩展性:在策略模式下扩展新的策略实现非常容易,只需要添加一个新的策略实现类,然后在你选择使用策略的地方选择使用这个新的策略实现。客户必须了解每种策略的差异:策略模型也有缺点,例如让客户选择使用哪种策略,这可能使客户需要了解所有策略,并且还要了解各种策略的功能和差异,所以只有这样才能做出正确的选择,而这也暴露了策略的具体实现。增加对象数量:由于策略模式将每个具体的策略实现单独封装到一个类中,如果备选策略很多,对象的数量会相当可观。只适用于扁平化算法结构:策略模式中的一系列算法地位平等,可以相互替代。实际上形成了一个扁平化的算法结构,即在一个策略接口下,存在多个相等的策略算法。相当于兄弟算法。而且运行时只使用一种算法,限制了算法使用的层次,使用时不能嵌套。***ndroidapplication下面说一下Android中的application。策略模式在Android中的一个典型应用就是Adapter。我们平时使用的时候,一般情况下可能会继承BaseAdapter,然后实现不同的View返回,在GetView中实现不同的算法。对外使用时,也可以根据不同的数据源,切换不同的Adapter。
