适配器模式(adapter)

解释

适配器,比如电源适配器。让原本不能用的东西,转换一下,使得他可以适配新的东西;
也就是说比如两个接口不适配的时候,B系统只能通过B接口去调用,A系统只能使用A接口,开发一个适配器,外壳还是A接口,但是内核是由B接口实现的,使得A系统能够调用B系统的内容。

在这里插入图片描述
在适配器的两端,一边还是2孔,另外一边是3孔

适配器的实现方式

一般有两种实现方式:类适配器,对象适配器

类适配器 UML类图

在这里插入图片描述

代码
定义客户端

client不是实现,而是依赖Target接口,也就是说,client只能使用Target接口以及他的子类。
出现另外一套接口标准,client也需要调用
但是另外一套接口标准明显不符合Target接口标准时时,引入 适配器。

package adapter;

public class Client {
    //客户端只能调用Target接口的子类
    public static void charge(Target target){
        target.request();
    }

    public static void main(String[] args) {
        //使用原生的进行充电
        charge(new ConcreteTarget());
        //现在有另外一个标准的充电方式,但是不满足Target标准,但是客户端又需要调用怎么办?
        //charge(new Adapee());

        //适配器就是通过适配器,可以实际调用任何东西
        charge(new Adapter());//将我的标准告诉适配器,适配器去完成转换,适配,并且返回,不需要修改任何类,增加一个适配器即可
    }
}

定义客户端使用的接口标准
package adapter;

public interface Target {
    void request();
}

定义客户端原本使用的实现类

但现在不能使用了

package adapter;
//Target接口的一个实现类
public class ConcreteTarget implements Target{
    @Override
    public void request() {
        System.out.println("使用原生的两口插座进行充电");
    }
}

定义另外一个接口标准的实现
package adapter;

public class Adapee {
    public void anotherRequest(){
        System.out.println("另外一套系统的充电标准,使用三口充电");
    }
}

通过适配器解决协调
package adapter;

/**
 * 定义一个转换器
 * 一边满足两口
 * 另外一边又可以调用三口
 * 基于继承,把三口那边的东西全部拿过来
 * 其实你想, 使用一个指针指向一个三口对象好像也可以
 */
public class Adapter extends Adapee implements Target{

    @Override
    public void request() {
        //直接掉三口的方法进行返回,同时对返回的数据进行转换,类似于电压的转换
        super.anotherRequest();
        System.out.println("通过适配器,实际调用三口插座");

    }
}

类适配器UML

在这里插入图片描述

你看,是吧,通过只有对象类进行调用

上面的例子提到,适配器通过继承待适配的类,把待适配的类的成员全部拿过来。但其实通过持有一个待适配的对象也可以实现功能,不通过继承。
实现方式与类适配器实现方式大致相同,只不过将 Adapter 从 Adaptee 类继承 改为 Adapter 持有 Adaptee 类对象。

修改适配器
package adapter;

/**
 * 定义一个转换器
 * 一边满足两口
 * 另外一边又可以调用三口
 * 基于继承,把三口那边的东西全部拿过来
 * 其实你想, 使用一个指针指向一个三口对象好像也可以
 */
public class Adapter implements Target{

    Adapee adapee;

    public Adapter(Adapee adapee) {
        this.adapee = adapee;
    }

    @Override
    public void request() {
        //直接掉三口的方法进行返回,同时对返回的数据进行转换,类似于电压的转换
        adapee.anotherRequest();
        System.out.println("通过适配器,实际调用三口插座");

    }
}

总结

适配器模式适合于系统整合,扩展,接口调试
== 适配器嘛,只要适配器开发得好,大部分系统都可以整合。==

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值