單一職責原則(優(yōu)化代碼的第一步)
- 描述:大致說就是代碼各個類之間職責分明畸冲,只做自己應(yīng)該做的事情,當自己發(fā)生改變時能夠不影響其他的類绷落。
所有的不想關(guān)的功能不應(yīng)該都在同一個類中的完成饭聚,不然最后導致一個類中有很多的代碼逸雹,也不利于閱讀瘾蛋。
一個優(yōu)秀的程序員能夠不斷的優(yōu)化自己的代碼讓它更具設(shè)計美感俐镐。 - 例子:如寫一個下載圖片和緩存的功能
public class ImageLoader {
//圖片緩存
public LruCache<String, Bitmap> bitmapLruCache;
//線程池 線程數(shù)量為cup數(shù)量
ExecutorService executorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public ImageLoader() {
initCache();
}
/***
* 圖片緩存
*/
public void initCache() {
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 4; //用于緩存圖片
bitmapLruCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
//一張圖片占據(jù)的內(nèi)存
}
};
}
/**
* 換成圖片
*
* @param url
* @param imageView
*/
public void displayImage(final String url, final ImageView imageView) {
imageView.setTag(url);
executorService.submit(new Runnable() {
@Override
public void run() {
Bitmap bitmap = downloadImage(url);
imageView.setImageBitmap(bitmap);
//緩存
bitmapLruCache.put(url, bitmap);
}
});
}
/**
* 圖片下載下來
*
* @param url
*/
private Bitmap downloadImage(String url) {
Bitmap bitmap = null;
try {
URL url1 = new URL(url);
HttpURLConnection httpURLConnection = (HttpURLConnection)
url1.openConnection();
bitmap = BitmapFactory.decodeStream(httpURLConnection.getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
}
這樣的功能就寫在一個類中當其中一個方法中的代碼改變時其它的也要跟著改變,所以我們要讓代碼更加的靈活更具擴展:
可以把緩存功能和下載顯示功能分開來寫哺哼。
![修改后的UML圖](http://note.youdao.com/favicon.ico)
public class ImageCache {
//圖片緩存
public LruCache<String, Bitmap> bitmapLruCache;
//線程池 線程數(shù)量為cup數(shù)量
ExecutorService executorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
public static ImageCache imageCache;
public static ImageCache getInstache() {
if (imageCache == null) {
imageCache = new ImageCache();
}
return imageCache;
}
public ImageCache() {
initCache();
}
/**初始化 */
public void initCache() {
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
int cacheSize = maxMemory / 4; //用于緩存圖片
bitmapLruCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024; //一張圖片占據(jù)的內(nèi)存
}
};
}
public void put(String url, Bitmap bitmap) {
bitmapLruCache.put(url, bitmap);
}
public Bitmap getBitmap(String url) {
if (bitmapLruCache != null) {
return bitmapLruCache.get(url);
}
return null;
}
}