接口隔離原則:客戶端不應該依賴它不需要的接口。另一種定義:類間的依賴關係應該建立在最
小的接口上。接口隔離原則就是把龐大的、臃腫的接口拆分成儘可能小的和具體的接口,這樣客
戶只需要實現他需要實現的接口就可以了,那些不必要實現的接口就被隔離開了,即不在我們所
依賴接口的實現(implement)類中,代碼就會變得簡潔。說白了就是對一個複雜、臃腫的接口
進行拆分,使得每個接口的功能具體、簡單。
我們還是舉個簡單的例子說明:
1.我們創建一個接口,用於描述各種交通工具的接口Vehicle
public interface Vehicle {
void car();
void bus();
void truck();
}
2.現在我們去實現這個接口
2.1我要描述我的小車
public class MyCar implements Vehicle{
private static final String TAG = "MyTest";
@Override
public void car() {
Log.i(TAG,"This is my car.");
}
@Override
public void bus() {
//這個方法不是必須的
}
@Override
public void truck() {
//這個方法不是必須的
}
}
我們會發現在MyCar這個類中,我們並沒有用到bus()和truck()這兩個方法。但由於它們是和car()在
同一個接口裏,所以也必須在MyCar類中出現。
同理看下下面這兩個方法一樣
public class MyTruck implements Vehicle{
private static final String TAG = "MyTest";
@Override
public void car() {
//這個方法不是必須的
}
@Override
public void bus() {
//這個方法不是必須的
}
@Override
public void truck() {
Log.i(TAG,"This is my truck.");
}
}
public class MyBus implements Vehicle {
private static final String TAG = "MyTest";
@Override
public void car() {
//這個方法不是必須的
}
@Override
public void bus() {
Log.i(TAG, "This is my bus.");
}
@Override
public void truck() {
//這個方法不是必須的
}
}
那我們該怎麼去簡化這種麻煩呢,讓代碼簡潔清晰明瞭,沒有多餘的部分。很簡單,接口隔離告
訴了我們只要把接口簡化了就可以了。我們把接口Vehicle拆分成三個,如下所示:
public interface Vehicle {
void car();
void bus();
void truck();
}
public interface Car {
void cars();
}
public interface Bus {
void buss();
}
public interface Truck {
void Trucks();
}
現在我們需要實現Car這個接口,代碼如下,是不是簡潔了很多,砍掉了多餘的部分。
public class CartA implements Car {
private static final String TAG = "MyTest";
@Override
public void cars() {
Log.i(TAG,"這是汽車A,價值2000萬。");
}
}
public class CartB implements Car {
private static final String TAG = "MyTest";
@Override
public void cars() {
Log.i(TAG, "這是汽車B,價值100萬。");
}
}
總結:
1.接口儘量小,儘量具體。但是接口過小,也會使得接口過多,從而變得複雜,具體需要怎麼樣的
接口需要對具體問題具體分析。這個需要一定的編程經驗。
2.考慮要依賴接口的類所需要的方法,不要多餘的,多餘的就變得臃腫,也不要太小,否則接口就
會變得躲起來,失去了使接口變小的意義,只有專注地爲某個模塊提供定製接口服務,纔可能建立
最小的依賴關係。