1. 程式人生 > >java高階設計模式之介面卡模式

java高階設計模式之介面卡模式

  • 定義

將一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而

不能一起工作的那些類可以一起工作。

  • 介面和說明
  • 簡單例項:
  • package adaptersimple.example1;
    /**
     * 已經存在的介面,這個介面需要被適配
     * 
     *
     */
    public class Adaptee {
        /**
         * 示意方法,原本已經存在,已經實現的方法
         */
        public void specificRequest() {
            //具體的功能處理
        }
    }
  • 介面卡
  • public class Adapter implements Target {

        /**
         * 持有需要被適配的介面物件
         */
        private Adaptee adaptee;
        /**
         * 構造方法,傳入需要被適配的物件
         */
        public Adapter(Adaptee adaptee) {
            this.adaptee = adaptee;
        }
        @Override
        public void request() {

            //可能轉調已經實現了的方法,進行適配
            adaptee.specificRequest();
        }

  • /**
     * 使用介面卡的客戶端
     */
    public class Client{
        public static void main(String[] args) {
            //建立需要被適配的物件
            Adaptee adaptee = new Adaptee();
            //建立客戶端需要呼叫的介面物件
            Target target = new Adapter(adaptee);
            //請求處理
            target.request();
        }
    }


  • /**
     * 定義客戶端使用的介面,與特定領域相關
     */
    public interface Target {
        /**
         * 示意方法,客戶端請求處理的方法
         */
        public void request();
    }

  • 介面卡模式的功能
  • 1、 介面卡模式的主要功能就是進行轉換匹配,目的是複用已有的功能,而不是來實現新的介面。

    2、介面卡裡面也可以實現功能,稱這種介面卡為智慧介面卡。

    四、adaptee和target的關係

    介面卡模式中被適配的介面Adaptee和適配稱為的介面Target是沒有關聯的。

    五、介面卡的呼叫模式

  • 物件組合
  • 介面卡的實現方式其實是依靠物件組合的方式。

  • 適配的常見例項
    • 介面卡通常是一個類,一般會讓介面卡類去實現Target介面,然後在介面卡的具體實現裡面呼叫Adaptee。
    •  可以在介面卡的實現裡面,加入新功能的實現,這種介面卡被稱為智慧介面卡。
    • 適配多個Adaptee
    • 介面卡Adapter實現的複雜程度
    • 介面卡Adapter實現的複雜程度,取決於Target和Adaptee的相似程度。

    • 預設適配
    •    預設適配的意思是:為一個介面提供預設實現

    • 介面卡模式的優缺點
        1:更好的複用性
        2:更好的可擴充套件性
        3:過多的使用介面卡,會讓系統非常凌亂,不容易整體進行把握。
       介面卡模式的本質
        介面卡模式的本質是:轉換匹配,複用功能
      何時選用介面卡模式
      1、如果你想要使用一個已經存在的類,但是它的介面不符合你的需求,這種情況可以使用介面卡模式。
        來把已有的實現轉換成你需要的介面。
      2、如果你想建立一個可以複用的類,這個類可能和一些不相容的類一起工作,這種情況可以使用介面卡模式,到時需要什麼
      就適配什麼。
      3、如果你想使用一些已經存在的子類,但是不可能對每一個子類都進行適配,這種情況可以選用物件介面卡,
      直接適配這些子類的父類就可以了。