1. 程式人生 > >面向物件的六大原則解析

面向物件的六大原則解析

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

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

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

開閉原則(讓程式剛穩定,更靈活)

里氏替換原則(構建擴充套件性更好的系統)

依賴倒置原則()

介面隔離原則

迪米特原則