设计模式入门:适配器模式

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创

配器模式将一个类的接口适配成用户所期待的

场景:现在手机的数据接口有两种type-c和micro-usb,加入你现在有一个micro-usb的数据线,想给一个type-c接口的手机充电或者传输数据,这时你就需要一个适配器了;

方式

这里介绍两种适配器设计方式:

  • 对象适配器模式
    – 在这种适配器模式中,适配器容纳一个它包裹的类的实例。适配器调用被包裹对象的物理实体。
  • 类适配器模式
    – 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

设计

对象适配器

这里写图片描述

类适配器

这里写图片描述

实现

代码地址:https://github.com/telundusiji/designpattern

公共代码:

目标接口 TypeC接口

public interface TypeC {
    void usb3Data();
    void electric();
}

源接口 MicroUSB

public interface MicroUSB {
    void usb2Data();
    void electric();
}

源 MicroUSB数据线

@Slf4j
public class MicroUSBCable implements MicroUSB {
    @Override
    public void usb2Data() {
        log.info("我是MicroUSB数据传输");
    }

    @Override
    public void electric() {
        log.info("我是MicroUSB充电");
    }
}

使用者 TypeC接口手机

public class TypeCPhone {
    public void charging(TypeC typeC){
        typeC.electric();
    }

    public void dataTransfer(TypeC typeC){
        typeC.usb3Data();
    }
}

######1、类适配器

public class MicroUSBToTypeCAdapter extends MicroUSBCable implements TypeC {
    @Override
    public void usb3Data() {
        super.usb2Data();
    }

    @Override
    public void electric() {
        super.electric();
    }
}

######2、对象适配器

public class MicroUSBToTypeCAdapter implements TypeC {

    private MicroUSB microUSB;

    public MicroUSBToTypeCAdapter(MicroUSB microUSB) {
        this.microUSB = microUSB;
    }

    @Override
    public void usb3Data() {
        microUSB.usb2Data();
    }

    @Override
    public void electric() {
        microUSB.electric();
    }
}

经典使用

JDK中InputStreamReader和OutputStreamWriter分别实现了,Reader和Writer接口,创建实例时,分别需要传入InputStream和OutputStream对象,这是一个典型的对象适配器;

  • Reader和Writer时目标接口
  • InputStreamReader和OutputStreamWriter是对象适配器
  • InputStream和OutputStream是源接口

将InputStream和OutputStream的源适配成Reader和Writer的目标

个人公众号【爱做梦的锤子】,全网同id,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值