設計模式_16_適配器模式


適配器模式

1. 分析

  • 定義
    將一個類的接口(被適配者)轉換成客戶期望的另一個接口(目標類)
    使原本接口不兼容的類可以一起工作

  • 類型 結構型

  • 適用場景
    已經存在的類,它的方法和需求不匹配時(方法結果相同或相似)

    不是軟件設計階段考慮的設計模式,是隨着軟件維護,由於不同產品、不同廠家造成功能類似而接口不相同情況下的解決方案

  • 優點
    能提高類的透明性和複用,現有的類複用但不需要改變

    目標類和適配器類解耦,提高程序擴展性

    符合開閉原則

  • 缺點
    適配器編寫過程需要全面考慮,可能會增加系統的複雜性

    增加系統代碼可讀的難度

  • 擴展

    1. 對象適配器:符合組合複用原則,使用委託機制

    2. 類適配器:通過類繼承實現

  • 模式比較

    適配器模式與外觀模式:

    1. 都是對現有的類,現存的系統的封裝
    2. 外觀模式定義了新的接口,適配器模式複用原有的接口
    3. 適配器模式是使兩個已有的接口協同工作,外觀模式是在現有的接口中提供一個更爲方便的訪問入口
    4. 二者適配力度不同,外觀模式用來適配整個子系統,即外觀模式所針對的對象粒度更大

2. 示例

2.1 類適配

public class Adaptee {
    public void adapteeRequest(){
        System.out.println("被適配者的方法");
    }
}
public interface Target {
    void request();
}
public class ConcreteTarget implements Target {

    @Override
    public void request() {
        System.out.println("ConcreteTarget 目標方法");
    }
}
public class Adapter extends Adaptee implements Target {

    @Override
    public void request() {
        super.adapteeRequest();
    }
}
public class Test {

    public static void main(String[] args) {
       Target target = new ConcreteTarget();
       target.request();

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

在這裏插入圖片描述

2.2 對象適配

public class Adaptee {
    public void adapteeRequest(){
        System.out.println("被適配者的方法");
    }
}
public interface Target {
    void request();
}
public class ConcreteTarget implements Target {

    @Override
    public void request() {
        System.out.println("ConcreteTarget 目標方法");
    }
}
public class Adapter implements Target {

    private Adaptee adaptee = new Adaptee();
    @Override
    public void request() {
        adaptee.adapteeRequest();
    }
}
public class Test {

    public static void main(String[] args) {
       Target target = new ConcreteTarget();
       target.request();

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

在這裏插入圖片描述

3. 源碼

javax.xml.bind.annotation.adapters.XmlAdapter

org.springframework.aop.framework.adapter.AdvisorAdapter

org.springframework.web.servlet.HandlerAdapter

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章