1.定义
策略模式定义了一系列算法,并将每一个算法封装起来,而且使它们还可以相互转换。策略模式让算法独立于它的客户而独立变化。
2.实际应用
接下来我们实现ImageLoader的加载图片的策略,因为ImageLoader可能会需要逆序加载或者顺序加载图片。
定义一个加载策略接口
public interface LoadPolicy{
int compare(BitmapRequest request1,BitmapRequest request2);
}
顺序加载策略
public class SerialPolicy implements LoadPolicy{
@Override
public int compare(BitmapRequest request1,BitmapRequest request2){
return request1.serialNum - request2.serialNum;
}
}
逆序加载策略
public class ReversePolicy implementes LoadPolicy{
@Override
public int compare(BitmapRequest request1,BitmapRequest request2){
return request2.serialNum - request1.serialNum;
}
}
图片加载请求实现Comparable接口
public class BitmapRequest implements Comparable{
LoadPolicy mLoadPolicy = new SerialPolicy();
@Override
public int compareTo(BitmapRequest another){
return mLoadPolicy.compare(this,another);
}
}
用户在配置ImageLoader时就可以设置加载策略,
BitmapRequest.setLoadPolicy(mConfig.loadPolicy);
3.总结
策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好地演示了开闭原则,也就是定义抽象,注入不同的实现,从而达到很好的可扩展性。
优点:
- 结构清晰明了、使用简单直观;
- 耦合度相对而言较低,扩展方便;
- 操作封装也更为彻底,数据更安全。
缺点:
- 随着策略增加,子类也会变得繁多。