结构型-适配器模式

概述

适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。

问题

假如你在开发一个数据分析系统,它可以对传入的JSON数据进行分析。在开发过程中,你想整合第三方库直接使用第三方的现有接口,但遇到一个问题,那就是该库中只能处理XML数据,JSON格式显然无法使用现有的第三方接口。

解决方案

适配器模式就可以很好的解决这种问题,它可以将目标对象转换为接口所需要的对象,使其与接口进行正常交互。

结构

对象适配器

实现时使用了构成原则:适配器实现了目标接口,同时关联适配者对象。
在这里插入图片描述

类适配器

这一实现使用了继承机制:适配器同时继承两个对象的接口。在这里插入图片描述

  • 目标接口(Client Interface): 客户所期待的接口。可以是具体的或者抽象的类,也可以是接口。
  • 适配者类(Service): 通常来自第三方或者历史程序接口。当前客户端使用的目标接口与现有类接口不兼容,不能直接使用其功能。
  • 适配器(Adapter): 可以同时与目标接口和需要适配的接口进行交互。

优缺点

优点

  • 满足单一职责原则,将需要适配的地方从业务代码中分离。
  • 符合开闭原则,在目标接口不变的情况下,我们可以添加新类型的适配器。

缺点

代码复杂度增加

演示

现在有一个安卓充电线(可以给安卓手机充电),一个苹果手机。

/**
 * 安卓充电线(目标接口)
 */
public class AndroidLine {

    public void recharge(AndroidPhone androidPhone) {
        System.out.println("充电完成");
    }
}

/**
 * 安卓手机(适配者类)
 */
public class AndroidPhone {
}

/**
 * 苹果适配器(适配器)
 */
public class AppleAdapter extends AndroidPhone{
    private ApplePhone applePhone;

    public AppleAdapter(ApplePhone applePhone) {
        converToAndroidPhone(applePhone);
    }

    private AndroidPhone converToAndroidPhone(ApplePhone applePhone) {
        /*
         * 业务处理
         */
        return new AndroidPhone();
    }
}

/**
 * 客户端
 * 有一个苹果手机,一个安卓充电线
 */
public class AdapterDemo {
    public static void main(String[] args) {
        // 安卓充电线
        AndroidLine androidLine = new AndroidLine();
        // 苹果手机
        ApplePhone applePhone = new ApplePhone();
        /*
        正常应该是安卓线充安卓手机,但现在是一个苹果手机
        这时候就可以做一个苹果适配器来完成安卓给苹果充电
        androidLine.recharge(new AndroidPhone());
         */
        androidLine.recharge(new AppleAdapter(applePhone));
    }
}

总结

  • 当你希望使用某个类,但是其接口与其他代码不兼容时,可以使用适配器类作为两者之间的转换器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值