7.适配器模式

说明

适配器模式(Adapter Pattern) 是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
适配器模式的产生环境:例如出差时,会遇到欧标的插座,那么我们国标的插头就无法使用,这时就需要买一个插座转换器,将欧标的插孔转换成国标的插孔。国标插孔则是输出;
在这里插入图片描述
适配主要分为三类:类适配器、对象适配器、接口适配器;

类适配器模式

说明:类适配器是创建一个Adapter类去继承被适配的类(欧标插座),并且Adapter类需要实现最终输出的类(这个类定义一个方法,返回国标插座);

如下举例:
我们生活中的手机充电器,将220v电压转为5v的电压
在这里插入图片描述
上面的类图中,使用了依赖倒置原则;phone和VoltageAdapter者两个类本来是该直接依赖的,但是phone是依赖的voltage这个接口类。

Voltage5V:是一个接口,方法是返回一个5V结果;
Voltage220V:是一个已存在的220V类;
VoltageAdapter:是个适配器,它会继承Voltage220V和实现Voltage5V,最终返回5V结果;
Phone:聚合了Voltage5V,它的目标就是拿到5V电压;

/**
 * 定义一个220V电压
 */
public class Voltage220V {
    public int get220v(){
        System.out.println("被适配者220V电压");
        return 220;
    }
}

/**
 * 定义返回5V结果
 */
public interface Voltage5V {
    int get5v();
}

/**
 * 电压转换类,220v到5v
 */
public class VoltageAdapter extends Voltage220V implements Voltage5V{
    public int get5v() {
        System.out.println("电压转换中。。。。");
        return get220v() / 44;
    }
}


/**
 * 手机获取5V电压
 */
public class Phone {
    int voltage;
    public Phone(int voltage) {
        this.voltage = voltage;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "voltage=" + voltage +
                '}';
    }
}


public class Client {
    public static void main(String[] args) {
        System.out.println(new Phone(new VoltageAdapter().get5v()));
    }
}

对象适配器模式

和上面的类适配器模式的区别:
类适配模式中Adapter是去继承的220v电压的那个类,而对象适配器模式是Adapter聚合220v电压的这个类。

根据合成复用原则:类最好是通过聚合、组合、依赖,尽量不要继承,所以对象适配器模式是常用的适配器模式。

接口适配器模式

接口适配器模式和上面的两种模式侧重点不一样,接口适配器模式重点在于是使用者会使用到多少个接口中的方法,这里的适配器是对方法数量的一个控制。

举例:如果接口类A中定义了10个方法,使用者B类会使用到A类中的5个方法,其他5个方法不需要使用,对于这种情况,就可以建一个C类(抽象类),去实现A类,重写A类中的10个方法(只需要定义一个空方法),这样B类再继承C类,B类重写自己所需要的的5个方法就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的老菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值