面向?qū)ο蟮牧笤瓌t之迪米特原則
掃描二維碼
隨時(shí)隨地手機(jī)看文章
學(xué)習(xí)了何紅輝、關(guān)愛(ài)民寫(xiě)的《Android設(shè)計(jì)模式》,對(duì)于面向?qū)ο蟮牧笤瓌t有進(jìn)一步的理解,特此根據(jù)自己的理解記錄總結(jié)一下
什么是迪米特原則
也稱(chēng)為最少知識(shí)原則,意思就是一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解,其實(shí)就是解耦合,兩個(gè)類(lèi)之間的關(guān)系分離的越細(xì)越好,比如面向?qū)ο蟮牧笤瓌t之 —— 單一原則中講的,Imageloader類(lèi),它需要緩存,然而緩存ImageCache的具體實(shí)現(xiàn),ImageLoader是不知道的。
我們打個(gè)比方,你賣(mài)腎跟iphone代理商買(mǎi)了一臺(tái) Iphone100 ,結(jié)果用了幾天,泥馬壞了,你是不是應(yīng)該把手機(jī)給回代理商去保修,然而你是不需要知道,人家是怎么保修的,你只需要把手機(jī)給回代理商,讓人家去保修,其他的你一概不管,保修不好就還腎,就這么簡(jiǎn)單。
實(shí)際運(yùn)用一下,我們?cè)镜腎mageLoader類(lèi)是直接跟內(nèi)存緩存打交道的
[java]view plaincopy importandroid.graphics.Bitmap; importandroid.graphics.BitmapFactory; importandroid.util.LruCache; importandroid.widget.ImageView; importjava.io.IOException; importjava.net.HttpURLConnection; importjava.net.MalformedURLException; importjava.net.URL; importjava.util.concurrent.ExecutorService; importjava.util.concurrent.Executors; /** *CreatedbyAdministratoron2016/3/1. */ publicclassImageLoader{ publicImageLoader(){ } //圖片緩存類(lèi) ImageCacheimageCache=newImageCache(); //線程池,線城數(shù)量為cpu的數(shù)量 ExecutorServicemExecutorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); /** *顯示圖片 *@paramurl圖片的url *@paramimageView要顯示的view */ publicvoiddisplayImage(finalStringurl,finalImageViewimageView){ Bitmapbitmap=imageCache.get(url); if(bitmap!=null){ imageView.setImageBitmap(bitmap); return; } imageView.setTag(url); mExecutorService.submit(newRunnable(){ @Override publicvoidrun(){ Bitmapbitmap=downloadImage(url); if(bitmap==null){ return; } if(imageView.getTag().equals(url)){ imageView.setImageBitmap(bitmap); } imageCache.put(url,bitmap); } }); } /** *下載圖片 *@paramimageUrl網(wǎng)絡(luò)圖片地址 *@return返回bitmap對(duì)象 */ publicBitmapdownloadImage(StringimageUrl){ Bitmapbitmap=null; try{ URLurl=newURL(imageUrl); HttpURLConnectionconn=(HttpURLConnection)url.openConnection(); bitmap=BitmapFactory.decodeStream(conn.getInputStream()); conn.disconnect(); }catch(MalformedURLExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); } returnbitmap; } }
ImageCache類(lèi)
[java]view plaincopy importandroid.graphics.Bitmap; importandroid.util.LruCache; /** *CreatedbyAdministratoron2016/3/1. */ publicclassImageCache{ publicImageCache(){ //初始化圖片緩存 initImageCache(); } //圖片緩存類(lèi) LruCache