設計模式之介面卡模式(十四)
介面卡模式
簡介
介面卡模式是將一個類的介面轉換成客戶希望的另一個介面。介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。
例如我們對接其他公司系統的時候他們返回的資料和我們的實體類可能有出入,例如自己公司的使用者的電話資訊,只有一個電話。公司要同步別人系統的使用者資料到自己公司系統,被人設計的使用者有多個聯絡電話,這個時候拿到的資料是不一致的,是否可以通過一個轉換類將別人的資料封裝為合適自己的呢?那麼這個轉換類其實就充當了介面卡這個角色。
又例如你去美國談生意,不懂英語怎麼辦?難道你可以英語速學幾天內講一口流利的英語嗎?你的客戶可以中文速學幾天內講一口流利的中文嗎?都不現實。最好的方法就是找翻譯,那麼這個翻譯就是擔任了介面卡的角色。
通用類圖
實現方式
例如使用者期待的是Target類呼叫方法,但是自己提供的類是Adaptee這個類,那麼就不符合使用者的要求,所有可以通過增加介面卡類Adapter來轉換,其實就是包裝一下。
package com.rabbit.pattern.Adapter;
/**
* 使用者期待的介面
* Created by vip on 2018/4/14.
*/
public class Target {
public void request() {
System.out.println("使用者期待的介面");
}
}
package com.rabbit.pattern.Adapter; /** * 需要適配的類 * Created by vip on 2018/4/14. */ public class Adaptee { public void request() { System.out.println("原本的介面,不合適使用者的期待"); } }
package com.rabbit.pattern.Adapter;
/**
* 介面卡類,將不符合使用者期待的介面匹配為使用者期待的
* Created by vip on 2018/4/14.
*/
public class Adapter extends Target {
private Adaptee a = new Adaptee();
@Override
public void request() {
//自己處理適配的邏輯
a.request();
}
}
總結
適用場景
1、系統需要使用現有的類,而此類的介面不符合系統的需要。
2、想要建立一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作,這些源類不一定有一致的介面。
3、通過介面轉換,將一個類插入另一個類系中。
優點
1.可以讓任何兩個沒有關聯的類一起執行。
2.提高了類的複用。
3.增加了類的透明度。
4.靈活性好。
缺點
1.過多地使用介面卡,會讓系統非常零亂,不易整體進行把握。比如,明明看到呼叫的是 A 介面,其實內部被適配成了 B 介面的實現,一個系統如果太多出現這種情況,無異於一場災難。因此如果不是很有必要,可以不使用介面卡,而是直接對系統進行重構。
2.由於 JAVA 至多繼承一個類,所以至多隻能適配一個適配者類,而且目標類必須是抽象類。