适配器模式(Adapter Pattern)理解

适配器模式(Adapter Pattern)

定义

将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性。让原本因接口不匹配不能一起工作的两个类可以协同工作。

场景:

1、开发时需要调用的第三方API并没有拿到,先写个接口并mock个实现类,拿到接口之后再一个适配器进行适配(代码整洁之道第八章提到);

ps:假定这样一个场景会比较容易进行理解

伪代码如下

interface Target{
    void targetMethod();
}
​
class MockTargetImpl implements Target{
    void targetMethod(){
        System.out.print("这方法将来被其他API实现,届时这个方法将无用");
    }
}
​
class Client{
    main(){
        Target target = new MokcTarget();
        target.targetMethod();
    }
}
​
//第三方API出来了,接口如下
class NewClass{
    void newMethod(){
        System.out.print("正常要被调用的方法");
    }
}
​


根据预设场景,问题转化为使用target.targetMethod() 如何能调用到NewClass.newMethod()方法

引入适配器模式

在接口层和真实的实现层中间加一个Adapter实现,并通过Adapter间接调用newMethod方法;

伪代码如下:

class Adapter implements Target{
   void targetMethod(){
       //这是个假的,在这里并调用不到这个方法,因为Adapter中没有这个方法
        newMethod();
    }
}
class Client{
    main(){
        //只要把具体实现类换了,就不需要改动其他的代码了,完美
        Target t = new Adapter();
        t.targetMethod();
    }
}
​

适配器模式的两种实现

现在还有一个问题没有解决 ,如何在类Adapter的targetMethod()中调用到newMethod()方法

1、通过继承NewClass对象

class Adapter implements Target extends NewClass{
   void targetMethod(){
       //现在这个方法继承来的
        newMethod();
    }
}

2、通过拥有NewClass对象

class Adapter implements Target{
  NewClass newClass = new NewClass();
   void targetMethod(){
       //通过对象方法调用
        newClass.newMethod();
    }
}

适配器模式中的角色

目标接口:Target,客户端希望调用的接口

需要适配的类:NewClass,(在经典的例子中为Adaptee),是真实的需要使用的方法所在的类。

适配器:Adapter,接口的实现类,用于适配NewClass

思考

如果有多个类似NewClass类,可以通过多个Adapter适配器,仅在调用时修改实现类(Adapter1、Adapter2...)即可。

使原本没有继承/实现关系的类可以通过同一个接口进行调用(让原本因接口不匹配不能一起工作的两个类可以协同工作)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值