策略模式

原文链接: https://my.oschina.net/chaoge/blog/714580

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.总结

    策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略。这个模式很好地演示了开闭原则,也就是定义抽象,注入不同的实现,从而达到很好的可扩展性。

    优点:

  • 结构清晰明了、使用简单直观;
  • 耦合度相对而言较低,扩展方便;
  • 操作封装也更为彻底,数据更安全。

    缺点:

  • 随着策略增加,子类也会变得繁多。

 

转载于:https://my.oschina.net/chaoge/blog/714580

你可能感兴趣的:(策略模式)