策略模式

4 篇文章 0 订阅
4 篇文章 0 订阅

废话一下

看设计模式已经很久了,感觉自己也多少有些体会,这次我将从代码的角度去分析设计模式,将自己的一些理解记录分享一下。我将从策略模式出发,一步步将代码演化成其他设计模式,这将是一个比较有趣的过程,希望能够对读者有所帮助。废话少说,我们直接进入正题

策略模式

1、定义:

定义一组算法,将每个算法都封装起来,并且使他们之间可以互换

怎么来理解它呢?就是说我要去完成一件事,有多种方式、途径,那么我把每种方式都封装起来,提供统一的接口,那么我就可以随意切换每种方式。下面我们来举个例子:

在android中图片加载框架比较多,每一种框架都可以实现加载图片,但是有时候我们需要更换框架这就比较麻烦了,我们这里就用策略模式来对这些框架进行一些封装

2、步骤

a. 定义一个ImageLoader接口

public interface ImageLoader {
    void load(String url);
}

b. 用glide来实现图片加载

public class GlideImageLoader implements ImageLoader {
    @Override
    public void load(String url) {
        //这里实现具体的逻辑
        //Glide.with(context).into(imageView)
    }
}

c. 用fresco来实现图片加载

public class FrescoImageLoader implements ImageLoader {
    @Override
    public void load(String url) {
        //实现具体的逻辑
        //simpleDraweeView.setImageUri(url)
    }
}

d.定义一个ImageLoaderManager

public class ImageLoaderManager {
    private ImageLoader imageLoader;

    public ImageLoaderManager(ImageLoader imageLoader) {
        this.imageLoader = imageLoader;
    }
    public void loadImage(String url){
        //将图片加载转交给ImageLoader的实现类来操作
        if (imageLoader!=null) {
            imageLoader.load(url);
        }
    }
}

e.测试类

public class Test {
    public static void main(String[] args){
        GlideImageLoader glideImageLoader=new GlideImageLoader();
        //FrescoImageLoader frescoImageLoader=new FrescoImageLoader();
        ImageLoaderManager imageLoaderManager=new ImageLoaderManager(glideImageLoader);
        imageLoaderManager.loadImage("url");
    }
}

如此这般 我们就可以随意修改所使用的图片加载框架了,这就是策略模式

f.分析

首先,这里算法可以自由切换,
也就是说图片加载框架我可以以极小的代价去更换他,而不会影响我使用的地方;
其次,扩展性良好,当我想增加一种图片加载的方式时,
我只需要实现ImageLoader接口,替换ImageLoader即可

关注点

策略模式的关注点是什么?是算法/方式的无缝替换,强调的是多种自主的实现及替换

小结

ImageLoaderManager为什么能够实现动态切换ImageLoader呢?实际上,这里在某种程度上与静态代理模式相似,我将在下一篇来介绍下代理模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值