適配器模式

適配器模式
適配器模式(Adapter Pattern)是作為兩個(gè)不兼容的接口之間的橋梁。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個(gè)獨(dú)立接口的功能。

這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)加入獨(dú)立的或不兼容的接口功能。舉個(gè)真實(shí)的例子,手機(jī)充電需要5v,電源是交流的220v,我們使用適配器來(lái)充電.

需要被適配的類

public class Voltages220v {
    public int output220V() {
        int src = 220;
        System.out.println ("電壓" + src + "v");
        return src;
    }
}

真正的使用者

public class Phone {
    public void charging(Voltage5V voltage5V){
        if(voltage5V.output ()==5){
            System.out.println ("電壓為5v可以充電");
        }else{
            System.out.println ("電壓過(guò)高不可以充電");
        }
    }
}

需要得到的類,手機(jī)充電需要5v電源

//適配接口
public interface Voltage5V {
    int output();
}

適配器,將220V轉(zhuǎn)為5V

類適配器

//類適配器
public class VoltageAdapterClass extends Voltages220v implements Voltage5V{
     //適配過(guò)程即將220轉(zhuǎn)為5v
    public int output() {
        //獲取到220電壓
        int src = output220V ();
        int dst = src / 44;
        return dst;
    }
}

對(duì)象適配器

//對(duì)象適配器
public class VoltageAdapterObject implements Voltage5V {
    //對(duì)象適配器將要適配的對(duì)象作為成員變量
   Voltages220v output220V;

    public VoltageAdapterObject(Voltages220v output220V) {
        this.output220V = output220V;
    }
    //適配過(guò)程即將220轉(zhuǎn)為5v
    public int output() {
        //獲取到220電壓
        int src = output220V.output220V ();
        int dst = src / 44;
        return dst;
    }
}

調(diào)用

public class Client {
    public static void main(String[] args) {
        //類適配器
        Phone phone = new Phone ();
        phone.charging (new VoltageAdapterClass () );
        //對(duì)象適配器
        Phone phone1 = new Phone ();
        Voltages220v voltages220v = new Voltages220v ();
        phone1.charging ( new VoltageAdapterObject (voltages220v));
    }

}
/**
 * 一 類適配器
 *    1.類適配器的注意事項(xiàng)
 *      1)java是單繼承機(jī)制,所以類適配器需要繼承src(Voltages220v)類這一點(diǎn)算是一個(gè)缺點(diǎn),因?yàn)檫@要求dst必須是一個(gè)接口,有局限性
 *      2)src類的方法在Adapter中會(huì)暴露出來(lái),也增加了使用成本 在VoltageAdapter中我們使用了Voltages220v的output220V的方法,output220V方法被暴露了
 *      3)由于其繼承了src類,所以他可以根據(jù)需求重寫src類的方法,是的adapter更加的靈活
 * 二 對(duì)象適配器
 *    1.對(duì)象類適配器介紹
 *      1) 基本思路和類的適配器模式相同,只是將Adapter類做修改,不是繼承src,而是持有src類的實(shí)例,解決java單繼承的問(wèn)題.
 *      2) 根據(jù)"合成服用原則",在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系替代繼承關(guān)系
 *      3)對(duì)象適配器是適配器模式常用的一種
 */

接口適配器

需要被適配的類

public class Voltages220v {
    public int output220V() {
        int src = 220;
        System.out.println ("電壓" + src + "v");
        return src;
    }
}

需要得到的類,手機(jī)充電需要5v電源

public interface Interface {
    //接口適配器,可以適配多個(gè)電壓的方法
    void m5v();
    void m12v();
    void m24v();
    void m110();
}

使用的接口定義了4個(gè)方法,我們只需要5v,所以定義了一個(gè)中間適配器

public abstract class AbsInterface implements Interface {
    //創(chuàng)建了一個(gè)中間適配器,用于實(shí)現(xiàn)默認(rèn)的接口方法,減少使用時(shí)候適配器的代碼量
    Voltages220v voltages220v;

    public AbsInterface(Voltages220v voltages220v) {
        this.voltages220v = voltages220v;
    }
    @Override
    public  void m5v() {
    }
    @Override
    public void m12v() {
    }
    @Override
    public void m24v() {
    }
    @Override
    public void m110() {
    }
}
public class Client {
    public static void main(String[] args) {

        Voltages220v voltages220v = new Voltages220v ();
        //因?yàn)榻o手機(jī)充電,只需要5v就可以了
        AbsInterface absInterface = new AbsInterface (voltages220v) {
            @Override
            public void m5v() {
                System.out.println (voltages220v.output220V ());
                System.out.println ("只重寫m5v方法");
            }
        };
        absInterface.m5v ();
    }

}
/**
 * 三 接口適配器
 *    1.接口適配器介紹
 *      1) 一些書籍稱為: 適配器模式也叫缺省適配器模式
 *      2) 當(dāng)不需要全部實(shí)現(xiàn)接口提供的方法時(shí),可先設(shè)計(jì)一個(gè)抽象類接口,為改接口中每個(gè)方法提供一個(gè)默認(rèn)實(shí)現(xiàn),那么改抽象類的子類可以有選擇的覆蓋父類的某些方法實(shí)現(xiàn)需求
 *      3) 試用于一個(gè)接口不想使用所有方法的情況.
 */
?著作權(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ù)。

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