設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解解、保證程式碼可靠性、程式的重用性。
簡單理解:設計模式就是各種套路。
介面卡設計模式:解決介面與介面實現類之間的矛盾問題
如果一個介面有很多個方法,但是某一個實現只需要使用到其中的某一個方法,那麼根據介面的語法,這個實現必須重寫這個介面的所有方法。這將導致程式碼維護和閱讀很麻煩。於是就有了介面卡這個設計模式。
介面卡是一個類,實現這個介面,重寫全部方法,但是所有方法都是空實現,即全部重寫了,但是全部都是空著的,沒有方法體。
再定義實現的時候,就不要去實現這個介面了,而是繼承這個介面卡,然後在類中,要用到哪個方法就重寫那一個方法就可以了。
介面卡的所有方法都是空實現,因此建立介面卡的物件是沒有任何意義的,因此將介面卡定義為抽象的,即用 abstract 來修飾,目的就是不讓外界來建立它的物件。
介面:
package demo6;
public interface Inter {
public abstract void method1();
public abstract void method2();
public abstract void method3();
public abstract void method4();
public abstract void method5();
public abstract void method6();
public abstract void method7();
public abstract void method8();
public abstract void method9();
public abstract void method10();
}
介面卡:
package demo6;
public abstract class InterAdapter implements Inter { // 定義為抽象類, 不讓外界例項化這個類
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
@Override
public void method4() {
}
@Override
public void method5() {
}
@Override
public void method6() {
}
@Override
public void method7() {
}
@Override
public void method8() {
}
@Override
public void method9() {
}
@Override
public void method10() {
}
}
類:
package demo6;
public class InterImpl extends InterAdapter {
@Override
public void method5() {
System.out.println("重寫method5。");
}
}
總結:
-
當一個介面中抽象方法過多,但是我只要使用其中一部分的時候,就可以介面卡設計模式。
-
書寫步驟:
-
編寫中間類 XXXAdapter,實現對應的介面。
-
對介面中的抽象方法進行空實現。
-
讓真正的實現類繼承中間類,並重寫需要用的方法。
-
為了避免其他類建立介面卡類的物件,中間的介面卡類用 abstract 進行修飾。
-
-
如果繼承中間類的類還有別的父類, 而 Java 不允許多繼承, 怎麼辦呢? 可以讓這個中間類, 即介面卡去繼承這個父類.