一.簡稱
英文全稱InterfaceSegregation Principles,縮寫是ISP篙骡。
二.定義
一種定義是:客戶端不應該依賴于它不需要的接口溜腐;另一種定義是類間的依賴關(guān)系應該建立在最小的接口上倘核。
三.問題
比如當我們用到流的時候,在最后都要做關(guān)閉操作兰英,我們既要判斷非空操作展融,又要try...catch,寫一串代碼,如果只用到一個類還好渔工,要是類多的話锌钮,就要寫很多了,是可忍孰不可忍引矩。
四.解決
既然都要實現(xiàn)了Closeable接口梁丘,那么只要建立一個統(tǒng)一的方法來關(guān)閉這些對象就行了
舉例
public void put (String url,Bitmap bitmap){
FileOutputStream fileOutputStream =null;
try {
fileOutputStream =new FileOutputStream(cacheDir + url);
bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
}catch (Exception e){
e.printStackTrace();
}finally {
if(fileOutputStream!=null){
try {
fileOutputStream.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
try...catch中有多層級的大括號,很容易將代碼寫到錯誤的層級中旺韭,如果有很多類都需要關(guān)流操作氛谜,那么每個類都要寫這么多代碼,想必也是挺煩人的区端,怎么解決呢值漫?既然要實現(xiàn)Closeable接口,那就可以創(chuàng)建一個方法統(tǒng)一來關(guān)流织盼。
public final class CloseUtil{
private CloseUtil(){}
public static void closeQuietly(Closeable closeable){
if(null!=closeable){
try{
closeable.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
把關(guān)流的方法應用到put方法中:
public void put (String url,Bitmap bitmap){
FileOutputStream fileOutputStream =null;
try {
fileOutputStream =new FileOutputStream(cacheDir + url);
bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
}catch (Exception e){
e.printStackTrace();
}finally {
CloseUtil.closeQuitely(fileOutputStream);
}
}
代碼瞬間清晰了好多杨何,依賴于Closeable抽象而不是具體實現(xiàn),并且建立在最小化依賴原則的基礎上悔政,只需要知道這個對象是可關(guān)閉的晚吞,其他的不需要擔心,即接口隔離原則谋国。
Bob大叔(Robert C Martin)在21世紀早期將單一職責槽地、開閉原則、里氏替換原則、接口隔離以及依賴倒置5個原則定義為SOLID原則捌蚊,作為面向?qū)ο缶幊痰?個基本原則集畅,當這些原則被一起應用時,它們使得一個軟件系統(tǒng)更清晰缅糟、簡單挺智、最大程度地擁抱變化。
總結(jié):
接口隔離優(yōu)點:
(1)簡潔代碼
(2)接口最小化
(3)增加靈活性