利用代理模式隔离Android第三方组件(图片加载库,网络库)
2017-06-23 13:05
429 查看
最初项目中一直使用ImageLoader加载图片直到Glide的出现,项目面临着艰难的选择,一方面因为Glide的强大决定替换掉ImageLoader,而另一方面项目中大量耦合着ImageLoader加载图片的代码,这意味着巨大的工作量。为了避免之后出现相同的问题,于是我打算利用代理模式重构图片加载与网络请求模块。
代码:项目通用初始化接口
这样所有的图片加载通过代理类去实现,如果要改变加载框架(Picasso,Fresco),只需要实现AiJuImageLoad接口并在代理类里替换即可,客户端所有引用的图片操作都不需要修改。网络请求的思路相同代码就不贴了。
代码:项目通用初始化接口
public interface IInitialize { //初始化 void init(Context context); }图片加载器
public interface AiJuImageLoader extends IInitialize{ /** * 显示图片 * * @param imageUrl 图片地址 * @param imageView 显示图片的ImageView * @param defaultImage 默认图片 */ void displayImage(String imageUrl, ImageView imageView, int defaultImage); }图片加载器代理对象
public class AiJuImageLoaderProxy implements AiJuImageLoader { private AiJuImageLoader imageLoader; private static volatile AiJuImageLoaderProxy instance; public static AiJuImageLoaderProxy getInstance() { if (instance == null) { synchronized (AiJuImageLoaderProxy.class) { if (instance == null) { instance = new AiJuImageLoaderProxy(); } } } return instance; } private AiJuImageLoaderProxy() { imageLoader = new GlideImageLoad();//可任意替换 init(DataProviderManager.getContext()); } @Override public void init(Context context) { imageLoader.init(context); } @Override public void displayImage(String imageUrl, ImageView imageView, int defaultImage) { imageLoader.displayImage(imageUrl, imageView, defaultImage); } }Glide图片加载器
public class GlideImageLoad implements AiJuImageLoader { private Context mContext; @Override public void init(Context context) { this.mContext = context; } @Override public void displayImage(String imageUrl, ImageView imageView, int defaultImage) { Glide.with(mContext) .load(imageUrl) .placeholder(defaultImage) .into(imageView); } }代码调用
String imageUrl="http://images2015.cnblogs.com/news/24442/201703/24442-20170301190900595-1906438193.jpg"; ImageView imageView = (ImageView) findViewById(R.id.iv_test); AiJuImageLoaderProxy.getInstance().displayImage(imageUrl, imageView, R.mipmap.ic_default);
这样所有的图片加载通过代理类去实现,如果要改变加载框架(Picasso,Fresco),只需要实现AiJuImageLoad接口并在代理类里替换即可,客户端所有引用的图片操作都不需要修改。网络请求的思路相同代码就不贴了。
相关文章推荐
- 【设计模式】【代理模式,大图片加载】
- android异步图片加载三之handler+线程池+消息队列模式+缓存
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- Android利用universal-image-loader异步加载大量图片完整示例
- Android组件之Activity栈与加载模式
- android listview利用多线程异步加载图片并更新视图
- Android 利用多线程异步加载图,并把图片处理成圆角,并更新视图
- Android图片管理组件(双缓存+异步加载)
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- 弄明白android网络库之Volley listView加载大量图片
- Android 四大组件学习之activity的四种加载模式介绍
- Android利用universal-image-loader异步加载大量图片完整示例
- android universal image loader 开源的第三方 图片资源加载组件
- Android图片管理组件(双缓存+异步加载)
- android利用Bitmap加载图片所遇到的一个奇怪的OOM问题java.lang.OutOfMemoryError
- Android图片异步加载一之传统的handler+runnable模式
- Android利用Volley异步加载数据(JSON和图片)完整示例
- Android利用universal-image-loader异步加载大量图片完整示例
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- Android图片管理组件(双缓存+异步加载)