设计模式之适配器模式

什么是适配器模式

适配器模式(Adapter Pattern)是两个不兼容的接口之间的桥梁,主要用来解决两个接口之间不兼容的问题,它不用改变原有接口,就可以使原来不能直接调用的接口变得可以调用。比如我们常见的转接头读卡器其实就是充当着适配器这个角色。

适配器模式的三个角色

  1. 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口;
  2. 需要适配的类(Adaptee):需要适配的类;
  3. 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口;

优点

  1. 解耦,符合开闭原则
  2. 提高了类的复用性;
  3. 增加了类的透明度,易扩展,灵活性好;

缺点

  1. 如果使用类适配器,由于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为抽象类,不能为具体类,其使用有一定的局限性,不能将一个适配者类和它的子类都适配到目标接口;
  2. 过多地使用适配器,会让系统非常零乱,不易整体进行把握;

常见的应用场景

  1. Java中的jdbc;

下面我们来模拟一个读卡器的适配过程

创建一个SD卡接口,以及实现类

public interface ISDCard {

    /**
     * 读取存SD卡
     */
    String  readSDCard();
}
public class SdCard implements ISDCard {
    @Override
    public String readSDCard() {
        return "read sd card success";
    }
}

创建一个计算机类,定义一个读取SD卡的方法

public class Computer {

    public String readCard(ISDCard readCard){
        return readCard.readSDCard();
    }
}

然后来测试一下

public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        IReadCard card = new SdCardImpl();
        System.out.println(computer.readCard(card));;
    }
}

接下来我们要在不改变计算机读取存储卡方法的前提下读取TF类型存储卡,我们该怎么做呢?下面我们来演示通过适配器模式来读取TF卡

通过适配器模式读取TF卡

创建TF卡接口及实现类

public interface ITFCard {
    /**
     * 读取存TF卡
     */
    String  readSDCard();
}
public class TFCard implements ITFCard {
    @Override
    public String readSDCard() {
        return "read tf card success";
    }
}

创建TF卡适配器并实现ISDCard接口

public class TFCardAdapter implements ISDCard {

    private TFCard tfCard;
    public TFCardAdapter(TFCard  tfCard) {
        this.tfCard = tfCard;
    }

    @Override
    public String readSDCard() {
        return tfCard.readSDCard();
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        ISDCard card = new SdCard();
        System.out.println(computer.readCard(card));

        ITFCard tfCard = new TFCard();
        System.out.println(computer.readCard(new TFCardAdapter(tfCard)));
    }
}

输出结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值