使用Android 圖片緩存代碼來(lái)說(shuō)下開(kāi)閉原則 ?赶么,下面是常規(guī)的圖片緩存代碼
圖片A中:我們創(chuàng)建一個(gè)ImageCache類實(shí)現(xiàn)需要緩存的圖片的方式瘟仿,起初我們只實(shí)現(xiàn)sdcard和內(nèi)存緩存,
在ImageLoad獲取圖片也只通過(guò)這2個(gè)緩存地去查找圖片研铆,
當(dāng)我們需要添加第三乃至更多緩存方式時(shí) 就需要在ImageCache添加對(duì)應(yīng)的緩存方式方法埋同,
這時(shí)候我們就需要修改ImageCache同時(shí)也要需改ImageLoader 的displayImage方法?
這就違背了開(kāi)閉原則,只對(duì)擴(kuò)展開(kāi)發(fā) 棵红,對(duì)修改關(guān)閉凶赁,我們這里擴(kuò)展了 但是也修改了.........
圖片B中:我們把具體實(shí)現(xiàn)緩存的類都實(shí)現(xiàn)統(tǒng)一的ImageCache接口,具體緩存實(shí)現(xiàn)類只關(guān)注自己的緩存實(shí)現(xiàn)
在ImageLoader中通過(guò)setImageCache把緩存類對(duì)象注入逆甜,當(dāng)我們添加更多緩存方式時(shí)只擴(kuò)展一個(gè)新的緩存而不需要去
修改其他實(shí)現(xiàn)好的緩存類
個(gè)人總結(jié):
1:圖片A這種實(shí)現(xiàn)方式并不是不可取虱肄,這個(gè)要根據(jù)公司具體業(yè)務(wù)來(lái)調(diào)整
如果是單純的一般小公司,業(yè)務(wù)不是很大的交煞,而且又是單人開(kāi)發(fā)咏窿,圖A這種方式 寫(xiě)起來(lái)快速方便代碼又少
但是如果是大公司,業(yè)務(wù)邏輯復(fù)雜素征,需求變更頻繁集嵌,當(dāng)然B是更好的。
2:圖A這種方式某種意義上又違背了"類單一職責(zé)原則",但是也不是絕對(duì)的御毅,至少這個(gè)類只是實(shí)現(xiàn)了自己的緩存功能根欧,
一個(gè)類只有一個(gè)引起這個(gè)類變化的原因。即一個(gè)類只完成一個(gè)功能亚享,(類單一職責(zé)原則)
如果做不到一個(gè)類只完成一個(gè)功能咽块,最少要保證一個(gè)方法只完成一個(gè)功能。
3:原則是死的具體開(kāi)發(fā)還是按照具體的業(yè)務(wù)來(lái)調(diào)整吧欺税!圖片A這種方式侈沪,雖然會(huì)修改代碼,
但至少是以擴(kuò)展的方式去修改晚凿,并不會(huì)引起上層調(diào)用邏輯錯(cuò)誤
個(gè)人觀點(diǎn) 有錯(cuò)請(qǐng)指正