面向對象六大原則(五):接口隔離原則

一、概述

接口隔離原則(Interface Segregation Principle ,縮寫:ISP),客戶端不應該依賴它不需要的接口;一個類對另一個類的依賴應該建立在最小的接口上。

二、原則

使用多個專門的接口比使用單一的總接口要好。

一個類對另外一個類的依賴性應當是建立在最小的接口上的。

一個接口代表一個角色,不應當將不同的角色都交給一個接口。沒有關係的接口合併在一起,形成一個臃腫的大接口,這是對角色和接口的污染。

“不應該強迫客戶依賴於它們不用的方法。接口屬於客戶,不屬於它所在的類層次結構。”;再通俗點講,不要強迫客戶使用她們不用的方法,如果強迫用戶使用她們不使用的方法,那麼這些客戶就會面臨由於這些不使用的方法的改變所帶來的改變。

三、舉例說明

下面引用《Android源碼設計模式解析與實戰》一書中示例:

1.在使用了OutputStream或者其他可關閉的對象後,我們必須保證它們最終被關閉了,因此SD卡緩存類中就有如下代碼:

//將圖片緩存到內存中
    public void put(String url, Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir + url);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }finally {
            if(fileOutputStream != null){
                try{
                    fileOutputStream.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }//end if
        }// end if finally
    }

2.上述代碼中可讀性非常差,各種try...catch嵌套,我們知道Java中有個Closeable接口(點擊打開鏈接),該接口標識了一個可關閉的對象,它只有一個close方法,於是就有如下CloseUtils工具類的產生

public final class CloseUtils {
    private CloseUtils(){}
    /*
    * 關閉Closeable對象
    * @param closeable
    * */
    public static void closeQuietly(Closeable closeable){
        if(null != closeable){
            try {
                closeable.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

運用到put方法代碼如下:

    //將圖片緩存到內存中
    public void put(String url, Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir + url);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }finally {
            CloseUtils.closeQuietly(fileOutputStream);
        }
    }

該closeQuietly方法可以運用到各類可關閉的對象中,保證了代碼的重用性,該方法的基本原理就是依賴於Closeable抽象而不是具體實現(依賴倒置原則),並且建立在最小化依賴原則的基礎上,它只需要知道這個函數是可關閉的,其他的一概不關心,也就是這裏的接口隔離原則。

四、分析 

Robert C Martin在21世紀早期將 單一職責 、開閉原則 、里氏替換 、接口隔離以及 依賴倒置(依賴反轉) 5個原則定義爲SOLID原則,作爲面向對象編程的5個基本原則。當這些原則被一起應用時,它們使得一個軟件系統更清晰、簡單,最大程度地擁抱變化。

SOLID原則最終可以簡化爲幾個關鍵詞:抽象、單一、職責、最小化。   
           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章