适配器模式

一、简介

适配器模式(Adapter Pattern),此模式的作用就是兼容原本接口不匹配的两个类,起到桥梁的作用。

其实在Android中平常接触的就很多,ListViewGridViewRecyclerView都用到的Adapter就用到了适配器模式,无论给Adapter什么样的数据,最后到RecyclerView显示的都是View

二、类适配器模式

类的适配器模式,采用继承实现的。

  • target:目标接口,也就是期望得到的接口
  • Adaptee:需要适配的接口
  • Adapter:适配器,负责把Adaptee转换成Target的类

不说远了,就说手机充电头,其实就是一个电源适配器,生活用电的电压是220v,而手机充电的电压是5v,所以这时候就需要使用到电源适配器将220v的电压转换为5v(如果你是直接插在插板的USB接口上的话,当我没说)。

对应上面的UML图, 生活电压就是Adaptee,手机充电电压就是Target,不用多说,电源适配器自然就是Adapter了。

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==三、对象适配器模式

与类适配器模式不同的是,对象适配器模式不适用继承关系链接Adaptee类,而是使用代理关系链接到Adaptee

这种实现方式直接将要被适配的对象传递到Adapter中,使用组合的形式实现接口兼容的效果。比类适配器的实现方式更灵活,还有就是Adaptee对象不会暴露出来,因为没有继承被适配对象。

四、类适配器实现

//Target接口
public interface Volt5 {
    public int getVolt5();
}

//Adaptee类
public class Volt220 {
    public int getVlot220(){
        return 220;
    }
}

//Adapter类
public class VoltAdapter extends Volt220 implements Volt5 {
    @Override
    public int getVolt5() {
        return 5;
    }
}

public class Client{
    public static void main(String[] args){
        VoltAdapter adapter = new VoltAdapter();
        System.out.println("输出电压:" + adapter.getVolt5());
    }
}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

五、对象适配器实现

//Target接口
public interface Volt5 {
    public int getVolt5();
}

//Adaptee类
public class Volt220 {
    public int getVlot220(){
        return 220;
    }
}

//Adapter类
public class VoltAdapter implements Volt5 {

    Volt220 volt220;

    public VoltAdapter(Volt220 volt220){
        this.volt220 = volt220;
    }

    public int getVolt220(){
        return volt220.getVlot220();
    }

    @Override
    public int getVolt5() {
        return 5;
    }
}

public class Client{
    public static void main(String[] args){
        VoltAdapter adapter = new VoltAdapter(new Volt220());
        System.out.println("输出电压:" + adapter.getVolt5());
    }
}

六、总结

优点

  • 复用性好,当现有的类不符合需求时,通过适配器就可以使这些功能得到更好地复用。
  • 扩展性好,可以更好地扩展系统的功能

缺点

过多的使用,会让代码更加凌乱。

 

————————————————————————

作者:MrTrying
链接:https://www.jianshu.com/p/c7f2967b6e48
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值