美文网首页
21.适配器模式-接口适配器模式

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

作者: 测试员 | 来源:发表于2019-12-15 13:29 被阅读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();
    
        }
    }
    
    

    相关文章

      网友评论

          本文标题:21.适配器模式-接口适配器模式

          本文链接:https://www.haomeiwen.com/subject/ujiknctx.html