21.适配器模式-接口适配器模式

2019-12-15  本文已影响0人  测试员

UML

接口适配器模式

代码实现

需要被适配的类【电源】(普通类)可以扩展成抽象类

抽象适配类【充电器】(抽象类)

适配类1【新充电器】(继承充电器抽象类的普通类)

适配类2【旧充电器】(继承充电器抽象类的普通类)

定义适配功能的接口【变压器功能】(接口)

需要用到适配功能的类【手机-充电时】(普通类)

测试类【AdapterTest】


需要被适配的类【电源】

package com.yuan.dp.adapter;

/**
 * 提供电源
 * @author Yuan-9826
 */
public class 电源 {
    /**
     * 提供的电源
     */
   private int POWER = 220;

    public int getPOWER() {
        return POWER;
    }
}

抽象适配类【抽象充电器】

package com.yuan.dp.adapter;

/**
 * 充电器实现类
 *
 * @author Yuan-9826
 */
public abstract class 充电器 implements 充电功能接口 {
    /**
     * 被适配对象
     */
    private 电源 powerSupply;

    public 充电器(电源 powerSupply) {
        this.powerSupply = powerSupply;
    }

    /**
     *
     * @return 输出电压
     */
    @Override
    public int 变压(){
        System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
        try {
            Thread.sleep(1000);
            System.out.println("经过了很复杂的处理......");
            Thread.sleep(1000);
            int newPower = 5;
            System.out.println("输出的电压是 " + newPower + "伏");
            return newPower;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return -1;
    }

    /**
     *
     * @return 输出电流
     */
    @Override
    public int 快冲(){
        System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
        System.out.println("老式充电器不支持快充默认输出 3 安");
        return 3;
    }



}

适配类1【新充电器】

package com.yuan.dp.adapter;

/**
 * 新式充电器
 *
 * @author Yuan-9826
 */
public class 新式充电器 extends 充电器 {
    /**
     * 被适配对象
     */
    private 电源 powerSupply;

    public 新式充电器(电源 powerSupply) {
        super(powerSupply);
        this.powerSupply = powerSupply;
    }
    /**
     *
     * @return 输出电压
     */
    @Override
    public int 变压(){
        System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
        try {
            Thread.sleep(1000);
            System.out.println("经过了很复杂的处理......");
            Thread.sleep(1000);
            int newPower = 5;
            System.out.println("输出的电压是 " + newPower + "伏");
            return newPower;
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return -1;
    }

    /**
     *
     * @return 输出电流
     */
    @Override
    public int 快冲(){
        System.out.println("输入的电压是 " + powerSupply.getPOWER() + "伏");
        System.out.println("新式充电器支持快充哒~ 输出 6 安");
        return 6;
    }

}

适配类2【旧充电器】

package com.yuan.dp.adapter;

/**
 * 老式充电器:只具备基本充电器方法
 * @author Yuan-9826
 */
public class 老式充电器 extends 充电器{
    /**
     * 被适配对象
     */
    private 电源 powerSupply;

    public 老式充电器(电源 powerSupply) {
        super(powerSupply);
        this.powerSupply = powerSupply;
    }
}

定义适配功能的接口【变压器功能】

package com.yuan.dp.adapter;

/**
 * 定义充电器应有的功能
 * @author Yuan-9826
 */
public interface 充电功能接口 {

    /**
     *
     * @return 输出电压
     */
     int 变压();

    /**
     *
     * @return 输出电流
     */
    int 快冲();


}

需要用到适配功能的类【手机-充电时】

package com.yuan.dp.adapter;

/**
 * 手机需要充电 需要直连电源充电
 *
 * @author Yuan-9826
 */
public class 手机 {

    充电器 charger;

    public 手机(充电器 charger) {
        this.charger = charger;
    }

    /**
     * 充电方法
     */
    void charge() {
        //输出电压
        int power = charger.变压();
        //输出电流
        int an = charger.快冲();

        //电压>5 或 <5都是不正常 要抛出异常
        if (power > 5) {
            System.out.println("充电电压 > 5V,手机爆炸了");
        } else if (power < 5) {
            System.out.println("充电电压 < 5V,手机依然没电");
        } else {
            //电压正常时判断电流是不是快充
            if (an < 6) {
                System.out.println("手机用5伏电压正常充电啦~");
            } else {
                System.out.println("手机用5伏电压快速充电啦~");
            }
        }
    }
}

测试类【AdapterTest】

package com.yuan.dp.adapter;

public class AdapterTest {
    public static void main(String[] args) {
        /**
         * 自带220v电压
         */
        电源 powerSupply = new 电源();

        充电器 newCharger = new 新式充电器(powerSupply);
        手机 phone_1 = new 手机(newCharger);
        phone_1.charge();

        System.out.println("----------------------------------------");

        充电器 oldCharger = new 老式充电器(powerSupply);
        手机 phone_2 = new 手机(oldCharger);
        phone_2.charge();

    }
}

上一篇下一篇

猜你喜欢

热点阅读