您的位置:首页 > 理论基础 > 计算机网络

利用代理模式隔离Android第三方组件(图片加载库,网络库)

2017-06-23 13:05 429 查看
最初项目中一直使用ImageLoader加载图片直到Glide的出现,项目面临着艰难的选择,一方面因为Glide的强大决定替换掉ImageLoader,而另一方面项目中大量耦合着ImageLoader加载图片的代码,这意味着巨大的工作量。为了避免之后出现相同的问题,于是我打算利用代理模式重构图片加载与网络请求模块。

代码:项目通用初始化接口

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接口并在代理类里替换即可,客户端所有引用的图片操作都不需要修改。网络请求的思路相同代码就不贴了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: