1. 程式人生 > >設計模式(8)—— 結構型 ——介面卡(Adapter)

設計模式(8)—— 結構型 ——介面卡(Adapter)

  • 定義:將一個類的介面轉換成客戶期望的另一個介面,使原本介面不相容的類可以一起工作
  • 型別:結構型
  • 適用場景:
    • 已經存在的類,它的方法和需求不匹配時(方法結果系統或者相似)
    • 不是軟體設計階段考慮的設計模式,是隨著軟體維護,由於不同產品,不同廠家造成功能類似而介面不相同情況下的解決方案。
  • 優點:
    • 提高類的透明性和複用,現有的類複用但不需要改變
    • 目標類和介面卡解耦,提高程式的擴充套件性
    • 符合開閉原則
  • 缺點
    • 介面卡編寫過程需要全面考慮,可能會增加系統的複雜性
    • 增加系統程式碼可讀的難度
  • 擴充套件
    • 物件介面卡
    • 類介面卡
  • 相關的設計模式
    • 介面卡和外觀模式

程式碼實現

借鑑它人部落格

另外,引入生活中的例子。下面也是借鑑他人(@geely)程式碼,例子非常好:

/**
 * Created by geely
 * 民用電源220V
 */
public class AC220 {
    public int outputAC220V(){
        int output = 220;
        System.
out.println("輸出交流電"+output+"V"); return output; } }
/**
 * Created by geely
 * 充電器,電源介面卡。
 */
public class PowerAdapter implements DC5{
    private AC220 ac220 = new AC220();

    @Override
    public int outputDC5V() {
        int adapterInput = ac220.outputAC220V();
        //變壓器...
        int
adapterOutput = adapterInput/44; System.out.println("使用PowerAdapter輸入AC:"+adapterInput+"V"+"輸出DC:"+adapterOutput+"V"); return adapterOutput; } }

介面卡介面

/**
 * Created by geely
 */
public interface DC5 {
    int outputDC5V();
}

測試程式碼類Test

/**
 * Created by geely
 */
public class Test {
    public static void main(String[] args) {
        Target target = new ConcreteTarget();
        target.request();

        Target adapterTarget = new Adapter();
        adapterTarget.request();



    }
}