适配器设计模式

适配器模式

对于适配器模式,主要有两种实现方式:类适配器和对象适配器。适配器设计模式的一个重要的用途就是解决代码的不兼容问题。

类适配器和对象适配器

适配器模式,顾名思义,这个模式是用来做适配的,它将不兼容的接口转化为兼容的接口,让原本不能一起工作的类可以一起工作。

适配器有两种实现方式,其中的类适配器使用继承关系来实现,对象适配器使用组合关系来实现。具体的代码实现如下所示。其中,ITarget表示要转化成的目标接口,Adaptee是一组不兼容ITarget的原始接口,Adaptor类将Adaptee转化成兼容ITarget接口定义的接口。这里提到的接口,并非编程语言的接口,而是表示宽泛的API。

//类适配器:基于继承

public interface ITarget{
    void f1();
    void f2();
    void fc();
}
public class Adaptee{
    public void fa(){.....}
    public void fb(){.....}
    public void fc(){.....}
}
public class Adaptor extends Adaptee implements ITarget{
    @Override
    public void f1(){
        super.fa();    
    }
    @Override
    public void f2(){
        super.fb();    
    }
    //fc()不需要实现,直接从Adaptee中继承,这是与对象适配器最大的不同点;
}
//对象适配器:基于组合
public interface ITarget{
    void f1();
    void f2();
    void fc();
}
public class Adaptee{
    public void fa(){.....}
    public void fb(){.....}
    public void fc(){.....}
}
public class Adaptor implements ITarget{

    private Adaptee adaptee;
    public Adaptor(Adaptee adaptee){
        this.adaptee = adaptee;
    }
    @Override
    public void f1(){
        adaptee.fa();    
    }
    @Override
    public void f2(){
        adaptee.fb();    
    }
    @Override
    public void fc(){
        adaptee.fc();
    }
}

在实际的开发中,到底是选用类适配器还是对象适配器,判断的依据主要有两个,一个是Adaptee接口的个数,另一个是Adaptee接口和ITarget接口的契合程度。具体的判断规则如下:

  1. 如果Adaptee接口不多,那么两种方式就都可以。

  2. 如果Adaptee的接口很多,并且Adaptee和ITarget接口定义大部分都相同,那么推介使用类适配器。因为大部分的接口相似,这样的话实现的代码量会小一点。

  3. 如果Adaptee的接口很多,并且Adaptee和ITarget接口定义大部分都不相同,那么推介使用对象适配器。因为组合结构相对于继承结构更加灵活。

适配器模式的几种应用场景

  • 封装有缺陷的接口设计

  • 统一多个类的接口设计

  • 替换依赖的外部系统

  • 兼容老版本接口

  • 适配不同格式的数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值