Univalsal_ImageLoader源码结构与创建者模式 初步小结
最近在回归看Univalsal_ImageLoader源码,本想自己也实现试试写一个,看源码是为了学习看能否使用,助于自己可以写出有自己逻辑结构的代码。
首先我们初始化ImageLoader的配置初始化的时候,就使用到了创建者模式。
ImageLoader的有个核心类是ImageLoaderConfiguration
如上图看ImageLoaderConfiguration结构图, 它涵盖了三级缓存、展示设置、任务处理和缓存处理对应的线程池等。建造者模式作用之一,主要是屏蔽各自的每个part或module之间的实现过程,达到各自独立,使用了一个builder内部类进行实现,而给到外层ImageLoaderConfiguration是给予每个所有需要的part引用向外面暴露自己。而我们往往发现,在ImageLoaderConfiguration里面基本是大部分的引用都是基于接口,认真去读比如MemoryCache的实现有多种实现方式,基于linkHashMap实现的fifo(先进先出)lifo(后进先出)结构、磁盘缓存DiskCache有区分为 有限制缓存大小的缓存实现类、无限制大小的实现类等。通过对builder的可以设置想要的初始化的对应的使用什么类型的内存缓存结构、磁盘缓存等、设置线程池大小等。ImageLoaderConfiguration 里面有个引用DisplayImageOptions又是一个基于创建者模式的实现。作为对于一个小功能模块,封装一个相对独立 的功能实现类,过程封装起来了,需要的我们暴露它的方法、引用等。以后需要改动的时候,我们只需要改里面对应小功能点即可。
阅读源码多一点,发现越是喜欢设计都是基于接口来作为暴露,接口的实现可以有多重实现,其实这个不就是我们的多态么。