美文网首页互联网从业者的日常程序员
老王讲设计模式(八)——适配器模式

老王讲设计模式(八)——适配器模式

作者: 大树林里的小树 | 来源:发表于2017-03-12 23:31 被阅读285次

    适配器模式,是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    适配器模式-主图镇楼

    公司的发展速度很快,一不小心,就收购了一个创业团队去做细分市场。这么一个改变,对于公司来说,是一个进步,但是对于正在开发和维护公司内部员工系统的小蔡来说,却是一个不大不小的麻烦。

    小蔡跑来找老王,说:“老王,你知道我们公司收购了一个小团队不?”

    老王说:“知道啊,咋了?”

    小蔡又问:“那你知道咋们公司的员工系统是有我再维护的不?”

    老王又说:“知道啊,咋了?”

    不明真相的老王

    小蔡说:“我们公司的员工系统里对员工的定义,和他们团队的员工系统对员工的定义,不太一样啊。现在张经理让我在我们的系统里去集成他们的系统,我有个想法,你帮我看看对不对,好吗?”

    //公司员工类
    public class CompanyEmployee{
      //主键ID
      public int id;
      //用户名
      public String username;
      //联系方式
      public String mobile;
    }
    
    //查询员工的Dao类
    public class EmployeeDao {
      //根据员工ID获取员工对象
      public CompanyEmployee getEmployeeById(int id){
        //从数据库查询一个员工后返回
        return findEmployeeById(id);
      }
    }
    

    小蔡接着说:“你看,上面是我们系统现在的情况,但是创业团队他们那边的代码是下面这个样子。”

    //创业团队的员工类
    public class GroupEmployee {
      //主键ID
      public long id;
      //用户名
      public String email;
      //联系方式
      public String phone;
    }
    
    //查询员工的Dao类
    public class EmployeeDao {
      //根据员工ID获取员工对象
      public GroupEmployee getEmployeeById(int id){
        //从数据库查询一个员工后返回
        return findEmployeeById(id);
      }
    }
    

    小蔡接着说:“我们的员工类不一样,查询的方法也不一样,查询出来的结果也不一样,难道要我把所有增删改查重新写一遍吗?难道要我再使用员工对象的地方也多写一堆方法,来兼容不同的参数类型么?”

    老王微微一笑,说:“你想多了。其实一个适配器模式就可以解决你的问题。”

    老王的迷之微笑

    小蔡好奇的问:“适配器是什么?”

    老王说:“适配器,你的Mac Book上,电源线上那一大坨白色的圆角矩形,就是适配器,他让你不论接入220V电压,还是360V电压,你的Mac Book都可以正常充电。简单说,适配器就是不论接受的输入是什么,它的输出总是一定的。”

    小蔡的适配器

    小蔡说:“听上去,挺不错的,那我该怎么做呢?”

    老王说:“睁大眼睛看好咯。下面我要写适配器了。”

    //员工适配器
    public class EmployeeAdapter {
    
      public static CompanyEmployee getEmployee(GroupEmployee employee){
        CompanyEmployee companyEmployee = new CompanyEmployee();
        companyEmployee.id = (int) employee.id;
        companyEmployee.username = employee.email;
        companyEmployee.mobile = employee.phone;
        return companyEmployee;
      }
    }
    

    老王接着说:“就这样就行了。这样你就可以将他们的员工类型转成我们的员工类型了。如果将来还有其他的员工类型,我们再适配器里增加一个方法,转一下就行了。这样我们不用起重写增删改查了。”

    小蔡眨了眨眼镜说:“老王,没对啊他们的员工id是long型的

    老王说:“那是他们疯了,一个员工系统的id怎么可能设计为long型?那得有多少员工啊?”

    小蔡接着问:“感觉好像太简单了吧?真这么简单?”

    老王说:“小蔡,设计模式是一种理念,并不是固定格式的代码。当然,经历过很多年的实践和总结后,的确有一套大家认为最合理的实践规范。但是我们要记住,设计模式只是经验的总结,只是一种理念,并不是固定格式,适配器模式的精髓在于,面对不同的输入,我们总是能得到固定的输出。这就足够了。要敢于质疑权威和经验,这样才能有思考和进步。对于目前我们的情况来说,我觉得这样的代码已经足够了。”

    老王/小蔡求打赏

    更多内容,正在赶来,敬请关注“小蔡和老王的技术日常”。
    PS:小蔡和老王的技术日常,已经建立QQ群,欢迎各位小伙伴通过发送简信的方式联系我们,询问QQ号。

    相关文章

      网友评论

        本文标题:老王讲设计模式(八)——适配器模式

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