适配器模式(Adapter)

1. 案例

需求:电源适配的项目,要让手机能够使用220V的交流电;注意,手机只接受5.5V的电压;

术语

   source:待适配的类/对象/接口
   Adapter:适配器
   destination:适配后可用的类/对象/接口

角色
   source
    Power220V===》220V的电源
   Adapter
    PowerAdapt===》电源适配器
 

分类
   类适配器模式
    Adapter 类,通过继承 source 类,实现 Destination 类接口,完成 source->Destination 的适配。
   对象适配器模式
    将 Adapter 类作修改,不是继承 source 类,而是持有 source 类的实例,以解决兼容性的问题。 即:持有 source 类,实现 Destination  类接口,完成source->Destination 的适配
   接口适配器模式
    当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求
         适用于一个接口不想使用其所有的方法的情况

 Destination
    Power5V===》5V的电源

开始案例演示:

进行前后对比:

使用前 

package com.javaxl.design.adapter.before;
    
    /**
     * @author 头发
     * @site www.javatf.com
     * @company
     * @create  2020-02-22 15:51
     *
     * 220V的电压
     */
    public class Voltage220V {
        private double voltage;
    
        public Voltage220V() {
            this.voltage = 220;
        }
    
        public double getVoltage() {
            return voltage;
        }
    
        public void setVoltage(double voltage) {
            this.voltage = voltage;
        }
    }
    
    
    public class Phone {
    //    充电
        public void charge(Voltage220V voltage220V){
            double voltage = voltage220V.getVoltage() / 40;
            System.out.println("最终手机充电所用电压:" + voltage + "V");
        }
    }
    

 使用后

 

/**
 * @author 头发
 * @site www.javatf.com
 * @company
 * @create  2020-02-22 15:51
 *
 * 220V的电压
 */
public class Voltage220V {
    private double voltage;

    public Voltage220V() {
        this.voltage = 220;
    }

    public double getVoltage() {
        return voltage;
    }

    public void setVoltage(double voltage) {
        this.voltage = voltage;
    }
}
​
/**
 * 目标接口
 */
interface Voltage5V{
    double getVoltage();
}
class VoltageAdapter implements  Voltage5V{
    private Voltage220V voltage220V;

    public VoltageAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public double getVoltage() {
        return voltage220V.getVoltage() / 40;
    }
}
/**
 * 适配器:里面封装了source源到destination目标的过程
 */
class VoltageAdapter implements  Voltage5V{
    private Voltage220V voltage220V;

    public VoltageAdapter(Voltage220V voltage220V) {
        this.voltage220V = voltage220V;
    }

    @Override
    public double getVoltage() {
        return voltage220V.getVoltage() / 40;
    }
}
package com.javatf.design.adapter.after;


public class Phone {
//    充电
    public void charge(Voltage5V voltage5V){
        double voltage = voltage5V.getVoltage();
        System.out.println("最终手机充电所用电压:" + voltage + "V");
    }
}
public class Client {
    public static void main(String[] args) {
        Phone phone = new Phone();
//        已知有一个220V的电源,要用它给手机进行充电,我们只能将220V的电源进行处理后才能给手机充上电
//        VoltageAdapter适配器对Voltage220V这个不能直接使用的电源适配后就可以使用了
        phone.charge(new VoltageAdapter(new Voltage220V()));
    }
}

注意事项和细节

  Adapter 模式最大的作用还是将原本不兼容的接口融合在一起工作

应用场景:

  SpringMvc框架中HandlerAdapter类
  安卓中监听适配器类中就使用了接口适配器(上拉、下拉...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值