安卓设计模式(六)策略模式

作者: uncochen | 来源:发表于2016-11-27 17:58 被阅读293次

策略模式提供了一种非常好的解耦方式,使我们的代码符合单一职责原则和开闭原则;策略模式在Android中使用的比较多,是一种很好理解的设计模式;

该系列其他文章:

定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化

使用场景:

  • 同一操作有多种实现方式,且可能有更换的需求
  • 需要封装多种同类型操作
  • 基于继承体系,有多个实现子类,需要使用if-else判断时

具体实现

这里举一个例子,在Androd中有很多图片加载框架,如Picasso-Glide-UniversalImageLoader等等,这些框架的功能就是图片加载及缓存,功能相同但是内部实现却是不同的,各有千秋;在项目开发中,有可能需要更换图片加载框架,如果前期我们使用了策略模式设计,那么更换框架将非常平滑且优雅.OK,这里基于策略模式和Builder模式来封装这个功能:

图片加载抽象:

/**
 * ===============================
 *
 * @Action : 图片加载接口,定义图片加载的方法,如果需要更换图片加载的框架,实现该接口即可
 * @Time : 2016/10/4 22:29
 *
 * ===============================
 */
public interface ImageLoaderClient {
    /**
     * 正常加载图片
     */
    void loadImage(Context context, ImageView view, String url, int placePicRes, int errorPicRes);

    /**
     * 先展示缩略图,加载完成展示原图
     */
    void loadImage(Context context, ImageView view, String url, int placePicRes, int errorPicRes, float thumbnail);
} 

具体加载器

/**
 * ===============================
 *
 * @Author: 陈振
 * @Email : 15629079270@163.com
 * @Action : 使用glide进行图片加载的实例
 * @Time : 2016/10/4 22:29
 *
 * ===============================
 */
public class GlideClient implements ImageLoaderClient {

    @Override
    public void loadImage(Context context, ImageView view, String url, int placePicRes, int errorPicRes) {
        Glide.with(context).load(url).placeholder(placePicRes).error(errorPicRes).into(view);
    }

    @Override
    public void loadImage(Context context, ImageView view, String url, int placePicRes, int errorPicRes, float
            thumbnail) {
        Glide.with(context).load(url).placeholder(placePicRes).error(errorPicRes).thumbnail(thumbnail).into(view);
    }
}

使用

public class IApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfig loaderConfig = new ImageLoaderConfig.Builder()
                .client(new GlideClient())//设置加载器
                .placePicRes(R.mipmap.placeholder)//占位图
                .errorPicRes(R.mipmap.placeholder)//错误图
                .interceptor(new DefaInterceptor())//设置拦截器
                .build();
        ImageLoaderHelper.init(loaderConfig);//初始化CommonImageLoader
    }
}

如果需要更换其他加载框架,实现ImageLoaderClient接口,传入不同的加载器实例即可:

.client(new PicassoClient())//设置加载器

分析

策略模式非常好理解,由上面可以看出我们的程序对单一图片加载框架依赖降低,低耦合,由于可以平滑更换具体实现,提高了程序的可扩展性.所以策略模式是一个好理解又能快速提高代码质量的设计模式

代码地址请戳:commonimageloader

关于作者

相关文章

  • 安卓设计模式(六)策略模式

    策略模式提供了一种非常好的解耦方式,使我们的代码符合单一职责原则和开闭原则;策略模式在Android中使用的比较多...

  • 安卓设计模式(二)单例模式

    单例模式是使用最广的设计模式,也是大家最为熟知的. 该系列其他文章: 安卓设计模式(一)面向对象六大设计原则 安卓...

  • 安卓设计模式(四)装饰者模式

    本文将讨论Java设计模式中比较重要的模式之一:装饰者模式 该系列其他文章: 安卓设计模式(一)面向对象六大设计原...

  • Android 设计模式demo项目

    Android 设计模式demo项目 安卓各种设计模式demoGitHub地址android-design-pat...

  • 安卓设计模式(八)工厂方法模式

    工厂方法模式是创建性设计模式之一,一般用于复杂对象的创建 该系列其他文章: 安卓设计模式(一)面向对象六大设计原则...

  • 工厂模式

    安卓常用的设计模式 工厂模式(Factory Pattern)是 Android中最常用的设计模式之一。这种类型的...

  • Java常见设计模式学习(非原创)

    文章大纲 一、策略模式二、观察者模式三、工厂模式四、单例模式五、其他模式六、设计模式总结七、参考文章 一、策略模式...

  • 安卓设计模式

    设计模式地址[https://www.runoob.com/design-pattern/singleton-pa...

  • 单例模式

    安卓常用的设计模式 单例模式的6种写法: 饿汉模式,懒汉模式(线程不安全),懒汉模式(线程安全),双重检查模式(D...

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

网友评论

    本文标题:安卓设计模式(六)策略模式

    本文链接:https://www.haomeiwen.com/subject/imjnpttx.html