23種設計模式(5)-介面卡模式

worldde發表於2018-02-07

定義:

將一個類的介面轉換成客戶希望的另外一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。

角色:

目標(Target)角色:這就是所期待得到的介面,也就是這類的介面是符合我們要求的

 

  (Adapee)角色:我們要使用的介面,但是這個介面不符合我們的要求,也就是現在需要適配的介面。

 

介面卡(Adaper)角色:介面卡類是介面卡模式的核心。介面卡把源介面轉換成目標介面。顯然,這一角色不可以是介面,而必須是具體類。

分類:

1,  類介面卡模式

class Adaptee {         
    public void specificRequest() {
         System.out.println("特殊請求,這個是源角色");
    }
}
/*這個是目標角色,所期待的介面*/

interface Target {         
    public void request();
}
  現在想要實現這個Target介面,但是不想重構,想要用上已有的Adaptee類,這時可以定義一個介面卡類,繼承想要使用的類,並且實現期待的介面。
class Adapter extends Adaptee implements Target{
         public void request() {
                   super.specificRequest();
         }
}
這樣,使用介面卡類和實現目標介面就完成了計劃,測試:

public class Test{
         public static void main(String[] args) {
                   //使用特殊功能類,即適配類
                   Target adapter = new Adapter();
                   adapter.request();
         }
}

2,  物件介面卡模式

  介面卡類關聯已有的Adaptee類,並且實現標準介面,這樣做的好處是不再需要繼承。

class Adapter implements Target{
         private Adaptee adaptee;

         public Adapter (Adaptee adaptee) {
                   this.adaptee= adaptee;
         }

         public void request() {
                   this.adaptee.specificRequest();
         }
}
 我們可以想到,此時輸出結果和類介面卡模式是相同的,測試:
public class Test{
         public static void main(String[] args) {
                   Targetadapter = new Adapter(new Adaptee());
                   adapter.request();
         }
}

區別:

 物件的介面卡模式不是使用繼承關係連線到Adaptee類,而是使用委派關係連線到Adaptee類。


優點:

複用性

系統需要使用現有的類,而此類的介面不符合系統的需要。那麼通過介面卡模式就可以讓這些功能得到更好的複用。

擴充套件性

在實現介面卡功能的時候,可以自由呼叫自己開發的功能,從而自然地擴充套件系統的功能。

缺點:

    過多的使用介面卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到呼叫的是A介面,其實內部被適配成了B介面的實現。所以介面卡模式不適合在詳細設計階段使用它,它是一種補償模式,專用來在系統後期擴充套件、修改時所用。


適用場景:

1、已經存在的類的介面不符合我們的需求;

2、建立一個可以複用的類,使得該類可以與其他不相關的類或不可預見的類協同工作;

3、使用一些已經存在的子類而不需要對其進行子類化來匹配介面。

4、舊的系統開發的類已經實現了一些功能,但是客戶端卻只能以另外介面的形式訪問,但我們不希望手動更改原有類的時候。

小結:

介面卡模式不適合在詳細設計階段使用它,它是一種補償模式,專用來在系統後期擴充套件、修改時所用,介面卡模式更像是一種補救措施。


                            閒暇之餘鞏固一下自己的知識體系 ,擴充一下自己的知識面。快利用瑣碎時間給自己充電吧 !

相關文章