1、策略模式概念
定义一系列算法,把他们独立封装起来,并且这些算法之间可以相互替换。策略模式主要是管理一堆有共性的算法,客户端可以根据需要,很快切换这些算法,并且保持可扩展性。
策略模式的本质:分离算法,选择实现。
2、怎么使用策略模式设计程序?
分开变化和不会变化的部分,建立一组新的类来代表变化的部分。
策略模式实现起来,主要需要3部分:抽象接口、实现算法、上下文。
//算法的接口
public interface PriceStrategy
{
public int setPrice(int orgPrice);
}
//实现一个接口,打7折商品
public class sevenPercentStrategy implements PriceStrategy
{
public int setPrice(int orgPrice)
{
System.out.println("打7折商品");
return orgPrice*0.7;
}
}
//实现一个接口,打5折商品
public class fivePercentStrategy implements PriceStrategy
{
public int setPrice(int orgPrice)
{
System.out.println("打5折商品");
return orgPrice*0.5;
}
}
//实现一个上下文对象
public class DstPrice
{
private PriceStrategy mPriceStrategy;
public void setPriceMode(PriceStrategy priceMode)
{
mPriceStrategy = priceMode;
}
public int ExeCalPrice(int price)
{
mPriceStrategy.SetPrice(price);
}
}
上面是一个最简单的策略模式的实现方式,按照功能分为3个部分,定义算法抽象接口,然后根据具体算法实现这些接口,最后需要定义一个上下文对象。这里的上下文对象主要用来切换算法,上下文对象里面也是针对接口编程,具体算法实现被封装了。
3、策略模式的理解
策略模式的目的是把具体的算法抽离出来,把每个算法独立出来。形成一系列有共同作用的算法组,然后这个算法组里面的算法可以根据实际情况进行相互替换。
策略模式的中心不是如何实现这些算法,而是如何组织和调用这些算法。也就是把我们平时写到一块的算法解耦出来,独立成一个模块,增强程序的扩展性。
4、策略模式优缺点
优点:避免多重条件语句
更好的扩展性
缺点:需要了解所有的策略,还要了解各种策略的 功能和不同,这样才能做出正确的选择
增加了对象数目
只适合扁平的算法结构
5、Android中的应用
下面说说在Android里面的应用。在Android里面策略模式的其中一个典型应用就是Adapter,在我们平时使用的时候,一般情况下我们可能继承BaseAdapter,然后实现不同的View返回,GetView里面实现不同的算法。外部使用的时候也可以根据不同的数据源,切换不同的Adapter。
确实,使用策略模式之后,代码变得可复用了,可以适应更多的变化,而不会互相影响。良好的oo设计必须具备可复用、可扩充、可维护三个特性。模式是前人历经验证的经验,可以用来解决程序设计当中的各种问题。