ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

设计模式--适配器模式

2021-10-18 21:58:14  阅读:131  来源: 互联网

标签:return String -- 适配器 number void 设计模式 public desc


适配器模式

引例

在这里插入图片描述

简介

基本介绍

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

工作原理

  1. 适配器模式:将一个类的接口转换成另一种接口.让 原本接口不兼容的类可以兼容。
  2. 从用户的角度看不到被适配者,是解耦的。
  3. 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法。
  4. 用户收到反馈结果,感觉只是和目标接口交互。
    在这里插入图片描述

示例

在实际业务开发中,经常需要做不同接口的兼容,尤其是中台服务。中台服务需要把各个业务线的类型服务同一包装,在对外提供接口。

在营销系统中,会遇到各种各样的MQ消息或接口,例:开户,内部订单、外部订单,如果逐个开发,会耗费很高的成本。此时,就需要有这样一个系统:能把外部MQ接入。
在这里插入图片描述

代码

public class CreateAccountMQ {
    private String number;
    private String address;
    private Date accountDate;
    private String description;
    public CreateAccountMQ() {
    }

    public CreateAccountMQ(String number, String address, Date accountDate, String decription) throws ParseException {

        this.number = number;
        this.address = address;
        this.accountDate = accountDate;
        this.description = decription;
    }

    public String getNumber() {
        return number;
    }

    public String getAddress() {
        return address;
    }

    public Date getAccountDate() {
        return accountDate;
    }

    public String getDecription() {
        return description;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void setAccountDate(Date accountDate) {
        this.accountDate = accountDate;
    }

    public void setDecription(String decription) {
        this.description = decription;
    }

    @Override
    public String toString() {
        return "{\"number\":\""+number+"\",\"address\":\""+address+"\",\"accountDate\","+accountDate+",\"description\",\""+description+"\"}";

    }
}

public class OrderMQ {
    private String uId;
    private String goodId;
    private String orderId;
    private Date createOrderDate;
    private String desc;
    public OrderMQ() {
    }

    public OrderMQ(String uId, String goodId, String orderId, Date createOrderDate,String desc) throws ParseException {
        this.uId = uId;
        this.goodId = goodId;
        this.orderId = orderId;
        this.createOrderDate = createOrderDate;
        this.desc=desc;
    }

    public String getUId() {
        return uId;
    }

    public String getGoodId() {
        return goodId;
    }

    public String getOrderId() {
        return orderId;
    }

    public Date getCreateOrderDate() {
        return createOrderDate;
    }

    public void setuId(String uId) {
        this.uId = uId;
    }

    public void setGoodId(String goodId) {
        this.goodId = goodId;
    }

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    public void setCreateOrderDate(Date createOrderDate) {
        this.createOrderDate = createOrderDate;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "{\"uId\":\""+uId+"\",\"goodId\":\""+goodId+"\",\"orderId\":\""+orderId+"\",\"createOrderDate\":"+createOrderDate+"}";

    }
}

目标类


```c
public class RebateInfo {
    private String userId;
    private String bizId;
    private String  bizDate;
    private String desc;



    public String getBizId() {
        return bizId;
    }

    public String getBizDate() {
        return bizDate;
    }

    public String getDesc() {
        return desc;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public void setBizId(String bizId) {
        this.bizId = bizId;
    }

    public void setBizDate(String bizDate) {
        this.bizDate = bizDate;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {
        return "RebateInfo{" +
                "userId='" + userId + '\'' +
                ", bizId='" + bizId + '\'' +
                ", bizDate=" + bizDate +
                ", desc='" + desc + '\'' +
                '}';
    }
}

适配类

public class MQAdapter {
    /*
    Map<String,String> link 两种消息转换的中间的联系map
     */
    public static RebateInfo filter(String jsonStr, Map<String,String> link) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Gson gson=new Gson();
        Map map = gson.fromJson(jsonStr,new
                TypeToken<HashMap<String,Object>>(){}.getType());
        RebateInfo rebateInfo=new RebateInfo();
        for(String key:link.keySet()){
            Object o = map.get(link.get(key));
            RebateInfo.class.getMethod("set"+key.substring(0,1).toUpperCase()+key.substring(1),String.class).invoke(rebateInfo,o);
        }

        return rebateInfo;

    }
}

测试

    @Test
    public void test() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, ParseException {
        Gson gson=new Gson();
        CreateAccountMQ createAccount=new CreateAccountMQ("10001","江苏省镇江市",new Date(),"开户");
        Map<String,String > link=new HashMap<>();
        link.put("userId","number");
        link.put("bizId","number");
        link.put("bizDate","accountDate");
        link.put("desc","description");
        RebateInfo rebateInfo = MQAdapter.filter(gson.toJson(createAccount), link);
        System.out.println("适配前:");
        System.out.println(createAccount.toString());
        System.out.println("适配后:");
        System.out.println(rebateInfo.toString());

        System.out.println("----------------------------------------------------");
        OrderMQ orderMQ=new OrderMQ("10002","1054649795","10549779756999",new Date(),"订单");
        Map<String,String > link2=new HashMap<>();
        link2.put("userId","uId");
        link2.put("bizId","orderId");
        link2.put("bizDate","createOrderDate");
        link2.put("desc","desc");
        RebateInfo rebateInfo2 = MQAdapter.filter(gson.toJson(orderMQ), link2);
        System.out.println("适配前:");
        System.out.println(orderMQ.toString());
        System.out.println("适配后:");
        System.out.println(rebateInfo2.toString());

    }

结果:

适配前:
{"number":"10001","address":"江苏省镇江市","accountDate",Mon Oct 18 21:48:26 CST 2021,"description","开户"}
适配后:
RebateInfo{userId='10001', bizId='10001', bizDate=Oct 18, 2021 9:48:26 PM, desc='开户'}
----------------------------------------------------
适配前:
{"uId":"10002","goodId":"1054649795","orderId":"10549779756999","createOrderDate":Mon Oct 18 21:48:26 CST 2021}
适配后:
RebateInfo{userId='10002', bizId='10549779756999', bizDate=Oct 18, 2021 9:48:26 PM, desc='订单'}

标签:return,String,--,适配器,number,void,设计模式,public,desc
来源: https://blog.csdn.net/m0_46633875/article/details/120834900

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有