Adapter-适配器模式

作者: oneWeekOneTopic | 来源:发表于2018-06-08 10:43 被阅读10次

解决问题

所谓适配器模式,类似于电脑的各种端口,例如USB,只要实现了USB协议的终端都可以在电脑上使用,只需要提供相应的驱动(Adaptor)即可。Adaptor的目的就是屏蔽各种差异,使核心业务不受输入输出的影响。

它主要是解决代码耦合的问题,使业务之间能够很好的隔离;核心业务代码可以更加集中的管理,并可以使用适配器供多种类型的客户端调用。

应用场景

业务隔离或一个核心业务需要提供给多种不同类型的客户端。比较有名的例子是:“六边形架构”,它很好地使用adaptor将输入输出与信心业务相隔离。

也有可能是返过来的一种情况,多种核心业务需要根据参数调整业务逻辑,使这种业务逻辑对外不可见。

原理图

image
  • Target 对外接口
  • Adapter 适配器,屏蔽内外差异
  • Adaptee 被适合的角色

示例

一个在工作中会经常遇到的问题:我们有一个业务,比如展示用户信息。它既需要在APP上展示(http/https)接口;公司的其它也需要用这个信息,则需要为内部提供一个接口(通常是RPC,比如thrift),我们这里采用一个适配器来解决这个问题。

public interface UserInfo<T, R> {
    public T getUserInfo(R request);
}
public class UserCoreBussiness {

    public UserCoreResponse getUserInfo() {
        return new UserCoreResponse();
    }

    public static class UserCoreRequest {

    }

    public static class UserCoreResponse {

    }
}
public class HttpAdaptor implements UserInfo<String, HttpServletRequest> {
    @Override
    public String getUserInfo(HttpServletRequest request) {
        // HttpServletRequest 转换成核心请求参数
        this.buildRequest(request);
        UserCoreBussiness.UserCoreResponse response = new UserCoreBussiness().getUserInfo();

        return this.changeResponse(response);
    }

    private UserCoreBussiness.UserCoreRequest buildRequest(HttpServletRequest request) {
        return new UserCoreBussiness.UserCoreRequest();
    }

    private String changeResponse(UserCoreBussiness.UserCoreResponse response) {
        return response.toString();
    }
}
public class ThriftAdptor implements UserInfo<Object, Object> {
    @Override
    public Object getUserInfo(Object request) {
        // HttpServletRequest 转换成核心请求参数
        this.buildRequest(request);
        //  核心业务
        UserCoreBussiness.UserCoreResponse response = new UserCoreBussiness().getUserInfo();
        // 转换成对应的输出
        return this.changeResponse(response);
    }

    private UserCoreBussiness.UserCoreRequest buildRequest(Object request) {
        return new UserCoreBussiness.UserCoreRequest();
    }

    private Object changeResponse(UserCoreBussiness.UserCoreResponse response) {
        return new Object();
    }
}

参考

https://en.wikipedia.org/wiki/Adapter_pattern

相关文章

  • Adapter-适配器模式

    解决问题 所谓适配器模式,类似于电脑的各种端口,例如USB,只要实现了USB协议的终端都可以在电脑上使用,只需要提...

  • ADAPTER-适配器(结构型模式)

      将一个类的接口转换成客户希望的另外一个接口。 代码实现 一、对象适配器结构实现(基于组合) 二、类适配器结构实...

  • Java设计模式(二)

    talk is cheap show me the code 适配器模式 类适配器模式 接口适配器模式 对象适配器...

  • 适配器模式

    目录 1、什么是适配器模式? 2、适配器模式结构? 3、如何实现适配器模式? 4、适配器模式的特点? 5、适配器模...

  • 设计模式之适配器模式

    适配器模式: 类适配器模式、对象适配器模式、接口适配器模式 1.类适配器模式:新的接口出现了,但是和老的接口不兼容...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 第4章 结构型模式-适配器模式

    一、适配器模式简介 二、适配器模式的优点 三、适配器模式的实例

  • 设计模式(Design Patterns)适配器模式(Adapt

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。 类的适配器模式 场景:将一个类转换成...

  • 适配器模式

    适配器模式主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。适配器模式将某个类的接口转换成客户端期...

  • 适配器模式

    先直观感受下什么叫适配器 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。 类适配器模式 对象适配器模...

网友评论

    本文标题:Adapter-适配器模式

    本文链接:https://www.haomeiwen.com/subject/yybosftx.html