適配器模式

模式定義

將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。

模式結構

比如:一個電腦需要兩項插座,220V的電源,現(xiàn)在有三項插座和110V電源,如何讓其工作呢,現(xiàn)在就需要插座適配器和電源適配器

類適配器:實現(xiàn)目標接口+繼承以前的類
對象的適配器:實現(xiàn)目標接口+成員變量(以前的類)

代碼實現(xiàn)

public class GBTwoPlug {

    public void powerWithTwo(){
        System.out.println("使用二相電源");
    }
}

/**
 * 三項插座接口
 */
public interface ThreePlugIf {

    //使用三項電流供電
    public void powerWithThree();
}

/**
 * 二相轉三相的插座適配器(采用組合方式)
 */
public class TwoPlugAdapter implements ThreePlugIf {

    private GBTwoPlug plug;

    public TwoPlugAdapter(GBTwoPlug plug) {
        this.plug = plug;
    }

    public void powerWithThree() {
        System.out.println("通過轉換");
        //對適配器原有接口方法的調(diào)用被委托給新接口的實例的特定方法 
        plug.powerWithTwo();
    }
}

/**
 * 采用繼承的方式
 */
public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf {
    public void powerWithThree() {
        System.out.println("借助繼承適配器");
        this.powerWithTwo();
    }
}

public class NoteBook {
    private  ThreePlugIf plug;
    public NoteBook(ThreePlugIf plug) {
        this.plug = plug;
    }
    //使用插座充電
    public void charge(){
        plug.powerWithThree();
    }

    public static void main(String[] args) {
        GBTwoPlug two = new GBTwoPlug();
        ThreePlugIf three = new TwoPlugAdapter(two);
        NoteBook nb = new NoteBook(three);
        nb.charge();

        three = new TwoPlugAdapterExtends();
        nb = new NoteBook(three);
        nb.charge();
    }
}

模式的優(yōu)缺點

優(yōu)點

  1. 更好的復用性
    如果功能已經(jīng)有了,只是接口不兼容,那么通過適配器模式就可以讓這些功能得到更好的復用。

  2. 更好的擴展性
    在實現(xiàn)適配器功能的時候,可以調(diào)用自己開發(fā)的功能,從而自然地擴展系統(tǒng)的功能。

缺點

  1. 過多的使用適配器,會讓系統(tǒng)非常凌亂,不容易整體進行把握。

思考

模式本質:轉換匹配,復用功能。

開發(fā)中的應用場景

  1. 日志框架
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容