適配器模式

將一個類的接口轉(zhuǎn)換成用戶希望得到的另一種接口。它使原本不相容的接口得以協(xié)同工作。
1、類適配器

package com.strife.pattern.adapter;

/**
 * 類適配器模式
 *
 * @author mengzhenghao
 * @date 2022/5/29
 */
public class ClassAdapter {

    public static void main(String[] args) {
        IVoltage5V voltage5V = new VoltageAdapter();

        Phone phone = new Phone();
        phone.charge(voltage5V);
    }
}

/**
 * 220V電壓(被適配的類)
 */
class Voltage220V {

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

/**
 * 5V電壓(適配接口)
 */
interface IVoltage5V {

    int output5V();
}

/**
 * 適配器類
 */
class VoltageAdapter extends Voltage220V implements IVoltage5V {

    @Override
    public int output5V() {
        int src = output220V();
        System.out.println("將220V電壓轉(zhuǎn)換為5V");
        //轉(zhuǎn)成5V
        return src / 44;
    }
}

/**
 * 使用者
 */
class Phone {
    public void charge(IVoltage5V voltage5V) {
        if (voltage5V.output5V() == 5) {
            System.out.println("電壓是5V,可以充電");
        } else if (voltage5V.output5V() > 5) {
            System.out.println("電壓是大于5V,不可以充電");

        }
    }
}

2、對象適配器

package com.strife.pattern.adapter;

/**
 * 對象適配器
 *
 * @author mengzhenghao
 * @date 2022/5/29
 */
public class ObjectAdapter {

    public static void main(String[] args) {
        Voltage220V1 voltage220V1 = new Voltage220V1();
        IVoltage5V voltage5V = new VoltageAdapter1(voltage220V1);

        Phone1 phone = new Phone1();
        phone.charge(voltage5V);
    }
}

/**
 * 220V電壓(被適配的類)
 */
class Voltage220V1 {

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

/**
 * 5V電壓(適配接口)
 */
interface IVoltage5V1 {

    int output5V();
}


/**
 * 適配器類
 */
class VoltageAdapter1 implements IVoltage5V {

    /** 聚合被適配類 */
    private final Voltage220V1 voltage220V1;

    public VoltageAdapter1(Voltage220V1 voltage220V1) {
        this.voltage220V1 = voltage220V1;
    }

    @Override
    public int output5V() {
        int src = voltage220V1.output220V();
        System.out.println("將220V電壓轉(zhuǎn)換為5V");
        //轉(zhuǎn)成5V
        return src / 44;
    }
}

/**
 * 使用者
 */
class Phone1 {
    public void charge(IVoltage5V voltage5V) {
        if (voltage5V.output5V() == 5) {
            System.out.println("電壓是5V,可以充電");
        } else if (voltage5V.output5V() > 5) {
            System.out.println("電壓是大于5V,不可以充電");

        }
    }
}

3、接口適配器模式(缺省適配器模式)
使用情形:當(dāng)不需要全部實現(xiàn)接口提供的方法時,可以先設(shè)計一個抽象類實現(xiàn)接口,并未該接口中每個方法提供一個默認實現(xiàn)(空方法),那么該抽象類的子類可以有選擇的覆蓋父類的某些方法來實現(xiàn)需求。

package com.strife.pattern.adapter;

/**
 * 接口適配器
 *
 * @author mengzhenghao
 * @date 2022/5/29
 */
public class InterfaceAdapter {

    public static void main(String[] args) {
        final AbstractAdapter adapter = new AbstractAdapter() {
            @Override
            public void method1() {
                System.out.println("使用了method1方法");
            }
        };
        adapter.method1();
    }
}

interface InterfaceA {

    void method1();
    void method2();
    void method3();
    void method4();
}

abstract class AbstractAdapter implements InterfaceA {
    @Override
    public void method1() {}

    @Override
    public void method2() {}

    @Override
    public void method3() {}

    @Override
    public void method4() {}
}

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

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

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