适配器模式

          适配器模式的英文名是Adapter Pattern 或者有的地方也叫做 Wrapper Pattern。它的目的是通过添加一个适配器让两种不兼容的接口兼容。重点在于它并没有修改原本两个接口的功能,只是两个接口在交互时不兼容,加入适配器进行兼容。通常很多地方都会举电压的例子,例如欧美国家使用的电压是110V,而中国的电压则是220V.那么如果欧美国家的人来中国旅游,他的充电器是不能直接插在我们中国的插座上的,需要一个电压转换器。这就是一个典型的适配器模式的场景,关键在于两个原来的调用方和被调用方的电压或者叫接口是无法改变的,只是不兼容,所以加上适配器,使两者兼容。

         在日常开发中,我们可能经常需要跟外部接口交互,而我们的接口可能不跟外部的接口兼容,例如我们接口需要的是json格式,而外部接口是xml格式,或者报文的字段名不一致,这个时候就可以使用适配器模式。又或者我们在支付系统中需要对接多种支付方式,例如支付宝或者微信,为了重用支付宝或者微信提供的sdk,我们也需要使用适配器模式,将第三方的功能提供一个统一的接口给上层进行调用。

        在jdk中,IO流,还有日志相关的功能,spring中的HandlerAdapter等等都是使用了适配器模式。下面我通过一个小例子来演示一下适配器模式。

        eg:播音员在播放新闻联播,然后旁边有一个手语翻译员将播音员的语音信息,转化为手语,方便聋哑人了解新闻信息。在这个里面手语播音员就是一个适配器。聋哑人期望获的手语信息,而播音员提供的是语音信息,两者之间不兼容,所以需要手语播音员来作为适配器来转换信息,注意这个不兼容通常是不可调和的矛盾,例如聋哑人一下子治好不现实,或者让播音员不说话,只用手势也不现实,因为要照顾更多的正常人收听新闻。

ITarget目标接口类

public interface News {

    String translate();
}

Adaptee 适配类

public class TranslateNews implements News {

    private StandardNews standardNews;


    public TranslateNews(StandardNews standardNews) {
        this.standardNews = standardNews;
    }

    @Override
    public String translate() {
        String speak = standardNews.speak();
        return "手语"+ speak;
    }
}

Adapter被适配类

public class StandardNews {

    public String speak(){
        return "Hello World";
    }
}

client调用方

public class Test {

    public static void main(String[] args) {
        News news = new TranslateNews(new StandardNews());

        String translate = news.translate();
        System.out.println(translate);
    }
}

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值