适配器模式

一看到适配器模式,给我的感觉就是,卧槽,这不就是代理模式么,仔细研究一番,还是有一点区别
在这里插入图片描述
上图上一部分是适配器模式,下一部分是代理模式

又百度找了找概念知识

适配器模式:旧的的接口业务满足不了客户端的需求,而旧的接口业务不能被完全重构(系统中还用的上),为了满足客户端新需求,新接口业务必须包含旧接口业务功能,同时可扩展满足客户端新需求
代理模式:为其他对象提供一种代理以控制对这个对象的访问,实际上还是调用被代理的业务

举一个简单一点的例子:
小王换了一台小米6,由于某种原因,小王未收到typeC的充电器,小王找到老王,老王给了小王一个TypeB的充电器,这也用不了啊,此时,拥有精通各种语言编写helloworld能力的小王,巴拉巴拉造出一个TypeB转TypeC的适配器,续上,顿时,只传来一声“TiMI”,小王满脸笑容

代码演示
接口

public interface TypeB {
	//充电方法
    String TypeBdoCharge();
}

实现类

public class TypeBImpl implements TypeB{
    public String TypeBdoCharge(){
        return "typeB";
    }
}

适配器

public class TypeAdapter extends TypeBImpl{
    public String typeCdoCharge() {
        String typeB = this.TypeBdoCharge();
        System.out.println("将typeB变为TypeC的过程......");
        String typeC = typeB + "====>typeC";
        return typeC;
    }
}

客户端

public class Test {
    public static void main(String[] args) {
        System.out.println("买了一台小米6,没送充电器,只有typeB充电器");
        System.out.println("扒拉扒拉造出个适配器:Adapter");
        TypeAdapter typeAdapter = new TypeAdapter();
        String type =  typeAdapter.typeCdoCharge();
        System.out.println(type+"续上!");
    }
}

这是一个很简单的适配器(适配器模式的原理到此就结束了)

这个时候,小王的妈妈老潘打麻将赢了钱,给小王买了一台iPhone 11,坑爹的是,又没有送充电器。小王口吐芬芳,拿起了扳手,开始扒拉扒拉,造出了一个TypeB转TypeIOS适配器,续上。

代码实现

适配器

public class TypeAdapter extends TypeBImpl{
    //typeB 转 typeC
    public String typeCdoCharge() {
        String typeB = this.TypeBdoCharge();
        System.out.println("将typeB变为TypeC的过程......");
        String typeC = typeB + "====>typeC";
        return typeC;
    }
	//typeB 转 typeIOS
    public String typeIOSdoCharge(){
        String typeB = this.TypeBdoCharge();
        System.out.println("将TypeB变为TypeIOS的过程......");
        String typeIOS = typeB + "====>typeIOS";
        return typeIOS;
    }
}

客户端

public class Test {
    public static void main(String[] args) {
       System.out.println("又换了一台iPhone ,没有充电器,只有typeB");
       System.out.println("找到了个转接头:Adapter");
       String typeIos = typeAdapter.typeIOSdoCharge();
       System.out.println(typeIos+"续上!");
    }
}

代码和之前的代码实现类似,我是不是闲着没事做啊,同样的代码些两边

看下面例子:
小王现在拥有两部手机(小米6+iPhone 11),但是只有一个typeB充电器,现在解决了充电问题,最近小王又有点烦恼,电脑上有些小视频想要传到两部手机上去,没办法,小王只能掏出扳手,扒拉扒拉…

  • 显然typeB只有充电功能,需要对其增强
public class TypeBEnhance extends TypeBImpl {
    //TypeBImpl只有充电功能
    public String TypeBdoCharge(){
      return super.TypeBdoCharge();
    }
    public String TypeBTransportData(){
        //传输数据功能
        return "TypeBData";
    }
}
  • 现在只有typeB的充电功能和数据传输功能,小王还需要TypeB和TypeIOS的充电功能和数据传输功能,两个可以写在同一个适配器中,但为了代码低偶尔,易维护,这里我们分别写在不同的适配器中

TypeC

public interface TypeCInterface {
    //充电功能
    String typeCdoCharge();
    //传输数据
    String typeCTransportData();
}
public class TypeCAdapter extends TypeBEnhance implements TypeCInterface {
    @Override
    public String typeCdoCharge() {
        String typeCharge = super.TypeBdoCharge();
        System.out.println("小王扒拉扒拉充电功能......");
        typeCharge = typeCharge+"====>typeCCharge";
        System.out.println("TypeC充电适配器造成功,续上!");
        return typeCharge;
    }
    @Override
    public String typeCTransportData() {
        String typeData = super.TypeBTransportData();
        System.out.println("小王扒拉扒拉传输数据功能......");
        typeData = typeData+"====>typeCData";
        System.out.println("TypeC数据传输适配器造成功,接上");
        return typeData;
    }
}

附上typeC类图
在这里插入图片描述
TypeIOS

public interface TypeIOSInterfac{
    //充电功能
    String typeIOSdoCharge();
    //传输数据功能
    String typeIOSTransportData();
}
public class TypeIOSAdapter extends TypeBEnhance implements TypeIOSInterfac {
    @Override
    public String typeIOSdoCharge() {
        String typeCharge = super.TypeBdoCharge();
        System.out.println("小王扒拉扒拉充电功能......");
        typeCharge = typeCharge+"====>typeIOSCharge";
        System.out.println("TypeIOS充电适配器造成功,续上!");
        return typeCharge;
    }
    @Override
    public String typeIOSTransportData() {
        String typeData = super.TypeBTransportData();
        System.out.println("小王扒拉扒拉传输数据功能......");
        typeData = typeData+"====>typeIOSData";
        System.out.println("TypeIOS数据传输适配器造成功,接上");
        return typeData;
    }
}

附上TypeIOS类图
在这里插入图片描述
以上,两个适配器做好了

小王开始试试TypeC

public static void main(String[] args) {
        TypeCAdapter typeCAdapter = new TypeCAdapter();
        typeCAdapter.typeCdoCharge();//充电
        typeCAdapter.typeCTransportData();//传输数据
    }

结果可以用,小王贼高兴,打算今晚搓一顿
在这里插入图片描述
这里就不测试TypeIOS适配器了,肯定都能用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值