面向對象的6大原則之一

單一職責原則(優化代碼的第一步)

  • 描述:大致說就是代碼各個類之間職責分明,只做自己應該做的事情,當自己發生改變時能夠不影響其他的類。
    所有的不想關的功能不應該都在同一個類中的完成,不然最后導致一個類中有很多的代碼,也不利于閱讀。
    一個優秀的程序員能夠不斷的優化自己的代碼讓它更具設計美感。
  • 例子:如寫一個下載圖片和緩存的功能
public class ImageLoader {

//圖片緩存
public LruCache<String, Bitmap> bitmapLruCache;

//線程池 線程數量為cup數量
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;    
            //一張圖片占據的內存
        }
    };
}

/**
 * 換成圖片
 *
 * @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;
    //線程池 線程數量為cup數量
    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; //一張圖片占據的內存
    }
  };
 }
 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;
 }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,813評論 25 708
  • 單一職責原則 (SRP) 全稱 SRP , Single Responsibility Principle 單一職...
    米莉_L閱讀 1,787評論 2 5
  • 本文出自《Android源碼設計模式解析與實戰》中的第一章。 1、優化代碼的第一步——單一職責原則 單一職責原則的...
    MrSimp1e0閱讀 1,804評論 1 13
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,739評論 18 399
  • 風 輕輕 來到 那吹皺一池的春水 迷蒙張開了雙眼 他問 春水啊春水 何處是我家 水不語 風 輕輕 來到 枝條裊...
    霧里狼煙閱讀 266評論 0 5