适配器模式

适配器模式

​ 我问知道,智能手机功能强大,在早些年的时候,可以通过耳机直接连接手机音频接口听歌,但现在许多手机都取消了音频接口,如果继续使用老款耳机听歌,则必须购买耳机转接器才可以听歌,这个耳机转接器就相当于一个适配器,在java开发中,也存在类似问题,比如说两个类不能直接交互,但是一个类又不得不调用另一个类的接口或者方法,因此我们需要中间类去适配被调用类,提供给调用者一个可用的接口,这种模式就是适配器模式。

适配器模式(Adapter)包含以下主要角色。

  • 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  • 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
  • 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

适配器模式分类:

​ 类适配:类适配是指适配器通过继承适配者的方式来把适配者接口转换成目标接口

image-20201018110639137

​ 对象适配:类适配是指适配器通过**组合(引用)**适配者的方式来把适配者接口转换成目标接口

image-20201018110725010

实例如下,使用类适配耳机和手机

//目标接口
public interface Target {

    void music();
}
//适配者
public class EarPhone {

    public void listen(){
        System.out.println("我是耳机,连接我可以听歌了!");
    }
}
//适配器
public class Adapter extends EarPhone implements Target {
    @Override
    public void music() {
        super.listen();
    }
}
public class PhoneClient {

    public static void sound(Target target){
        target.music();
    }


    public static void main(String[] args) {
        //EarPhone earPhone = new EarPhone();
        Adapter adapter = new Adapter();
        sound(adapter);
    }

image-20201018112010363

使用对象适配耳机和手机

public class Adapter2 implements Target {

    EarPhone earPhone;

    public Adapter2(EarPhone earPhone) {
        this.earPhone = earPhone;
    }

    @Override
    public void music() {
        earPhone.listen();
    }
}

image-20201018112356042

类适配和对象适配最大的区别在于类适配只能适配固定种类的适配者(耳机),因为java是但单继承的,而对象适配通过组合的方式(热插拔)可以适配不同类型的适配者(耳机)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值