Android架构那些事之第三方库的隔离(转)

来源:互联网 发布:威锋网 mac office 编辑:程序博客网 时间:2024/05/16 05:00

在进入主题之前我们先说一下app客户端为什么需要有一个好的架构。(转:android 架构第三方库隔离)
我们都知道一个好的架构会使我们的开发变得事半功倍。
设计架构的目的在于使我们的客户端易于扩展、方便单元测试、可复用。
做到使模块之间低耦合,模块内部高内聚。
我们在开发的过程中会不可避免的引用一些第三方库,比如网络请求库、图片加载库等等。就拿我们的图片加载库来说,程序中不会只有一个地方来引用到此库,可能有N个类会用到此库来显示图片。比如我们现在使用Universal-Image-Loader来展示客户端需要的图片,客户端总共有10个类使用该来显示图片。迭代了两个版本后老板突然说APP经常出现显示图片出现OOM的问题,我们需要将Universal-Image-Loader换成更高效的Picasso来显示图片。
听到这个需求我们的第一反应是”天哪,鬼知道项目里有多少个地方引用了ImageLoader库,我们得改多少代码,万一改代码的时候引发了其他的bug怎么办”。
问题来了我们应该如何避免这种“牵一发而动全身”的囧况。
好了,我们先来看下我们平常是怎么在项目中引用图片加载库的。

这里写图片描述
before.png

上图是我们大多数人的做法。那么我们怎么才能做到换了一个第三方加载库而是这四个引用类不做改动呢。
下面看下我们重新新设计之后的引用流程图
这里写图片描述
after.png

从上图我们能看到我们通过一个中间层来引用“第三方图片加载库”。这样做的好处是不管第三方图片加载库你换成Picasso还是Glide我们改变的只是这个中间层,其他的我们一行代码都不需要改动。
如果当时你是这样设计的当老板让你把Universal-Image-Loader换成Picasso时你一行代码也不用改动只需要扩展一个类就可以了。好了话不多说 我们来看代码如何设计。
我这里是使用代理模式来实现代码与图片加载库的隔离的。
首先抽象一个ImageLoader接口
这里写图片描述
我们当前是使用UniversalImageLoader来展示项目中的图片我们就建一个UniversalImageLoader类来实现上面的接口
这里写图片描述
接下来我们写一个代理类来帮我们实现图片加载的任务
这里写图片描述
当老板让我们换成Picasso来完成图片加载时 ,我们只需增加一个 PicassoImageLoader类然后将代理类中的这行代码 imageLoaderProxy = new UniversalImageLoader();换成imageLoaderProxy = new PicassoImageLoader()即可。
怎么样我们只改动一行代码就替换了一个图片加载库方便吧。

阅读全文
0 0