11.適配器模式

1.是什么

  • 定義
    適配器模式把一個(gè)類的接口換成客戶端所期待的另一種接口,從而使原本不匹配兩個(gè)類能夠在一起工作。類似于轉(zhuǎn)換插座、變壓器的作用。

  • 類適配器和對(duì)象適配器
    引用自http://www.importnew.com/20986.html##s1

類適配器模式使用的是繼承的方式,而對(duì)象適配器模式則使用的是組合的方法。從設(shè)計(jì)模式的角度來說,對(duì)象適配器模式遵循 OO 設(shè)計(jì)原則的“多用組合,少用繼承”,這是一個(gè)優(yōu)點(diǎn),但是類適配器模式有一個(gè)好處是它不需要重新實(shí)現(xiàn)整個(gè)被適配者的行為,畢竟類適配器模式使用的是繼承的方式,當(dāng)然這么做的壞處就是失去了使用組合的彈性。
所以在實(shí)際過程中需要根據(jù)使用情況而定,如果 Adaptee 類的行為很復(fù)雜,但是 Adapter 適配器類并不需要這些大部分的無關(guān)行為,那么使用對(duì)象適配器模式是合適的,但是如果需要重新實(shí)現(xiàn)大部分 Adaptee 的行為,那么就要考慮是否使用類適配器模式了。

2.有什么用

可以不修改原來的代碼而適配原來的系統(tǒng)。

3.怎么用

  • 類圖
  1. 類適配器


    adapterclass.PNG
  2. 對(duì)象適配器

區(qū)別在于類適配器使用繼承,而對(duì)象適配器使用組合。

  • 示例代碼
    示例演示把220V電源轉(zhuǎn)為5v電源
  • 原有代碼(220V)
/**
 * 
 * 既有的接口
 *
 */
public interface V220Battery {
    // 提供220v能源
    public void provide220VEnergy();

}

public class BYD220VBattery implements V220Battery {

    @Override
    public void provide220VEnergy() {
        System.out.println("byd 220v 電源");

    }

}

  • 新系統(tǒng)的目標(biāo)接口
public interface V5Battery {
    // 提供5v能源
    public void provide5VEnergy();
}

  • Adapter

/**
 * 對(duì)象適配器
 *
 */
public class Battery220To5Adapter implements V5Battery {
    private V220Battery v220Battery;

    public Battery220To5Adapter(V220Battery v220Battery) {
        this.v220Battery = v220Battery;
    }

    @Override
    public void provide5VEnergy() {
        System.out.println("轉(zhuǎn)換器轉(zhuǎn)換電源220v-5v");
        v220Battery.provide220VEnergy();
        System.out.println("轉(zhuǎn)換結(jié)束");
    }

}


/**
 * 類適配器
 *
 */
public class Battery220To5AdapterClassLevel extends BYD220VBattery implements V5Battery {

    @Override
    public void provide5VEnergy() {
        System.out.println("轉(zhuǎn)換器轉(zhuǎn)換電源220v-5v");
        provide220VEnergy();
        System.out.println("轉(zhuǎn)換結(jié)束");
    }

}

  • Client
public class Client {
    public static void main(String[] args) {
        V220Battery v220Battery = new BYD220VBattery();
        Battery220To5Adapter adapter = new Battery220To5Adapter(v220Battery);
        adapter.provide5VEnergy();
        Battery220To5AdapterClassLevel adapter2 = new Battery220To5AdapterClassLevel();
        adapter2.provide5VEnergy();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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