最近在迴歸看Univalsal_ImageLoader源碼,本想本身也實現試試寫一個,看源碼是爲了學習看可否使用,助於本身能夠寫出有本身邏輯結構的代碼。緩存
首先咱們初始化ImageLoader的配置初始化的時候,就使用到了建立者模式。學習
ImageLoader的有個核心類是ImageLoaderConfigurationui
如上圖看ImageLoaderConfiguration結構圖,線程
一、它涵蓋了三級緩存、展現設置、任務處理和緩存處理對應的線程池等。建造者模式做用之一,主要是屏蔽各自的每一個part或module之間的實現過程,達到各自獨立,使用了一個builder內部類進行實現,而給到外層ImageLoaderConfiguration是給予每一個全部須要的part引用向外面暴露本身。設計
二、而咱們每每發現,在ImageLoaderConfiguration裏面的屬性基本是大部分的引用都是基於接口,認真去讀好比MemoryCache的實現有多種實現方式,基於linkHashMap實現的fifo(先進先出)lifo(後進先出)結構、磁盤緩存DiskCache有區分爲 有限制緩存大小的緩存實現類、無限制大小的實現類等。經過對builder的能夠設置想要的初始化的對應的使用什麼類型的內存緩存結構、磁盤緩存等、設置線程池大小等。ImageLoaderConfiguration 裏面有個引用DisplayImageOptions又是一個基於建立者模式的實現。做爲對於一個小功能模塊,封裝一個相對獨立 的功能實現類,過程封裝起來了,須要的咱們暴露它的方法、引用等。之後須要改動的時候,咱們只須要改裏面對應小功能點便可。blog
閱讀源碼多一點,發現越是喜歡設計都是基於接口來做爲暴露,接口的實現能夠有多重實現,其實這個不就是咱們的多態麼。接口