首页 > 其他 > 详细

设计模式——适配器模式

时间:2016-02-21 22:34:58      阅读:310      评论:0      收藏:0      [点我收藏+]

 

一、定义

将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一个工作
 

二、适用的场景

要修改已经投产的接口
 

三、注意事项

适配器一般不用于开发阶段,通常用在服役的项目上
 

四、模式中的角色

  • 目标接口(Target):客户期待的接口
  • 需要适配的类(Adaptee):需要被适配的类
  • 适配器(adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。实现方法是适配器类继承需要适配的类,并实现目标接口
技术分享
 
 

五、应用场景举例

1、A公司有一套员工管理系统,其系统正在使用中,且主要代码如下
public interface ICompanyA {
    //获取员工ID
    public String getID();
    //获取员工姓名
    public String getName();
    public String getPhone();
    public String getAddress();
}    

2、现在A公司需要将一部分业务外包给B公司,B公司的一部分开发人员也会归A的员工管理系统来管

但是B公司自己本身也有一套管理系统,主要代码如下

public interface ICompanyB {
    //获取员工ID
    public Map getIDB();
    //获取员工姓名
    public Map getInfo();
    public Map getTel();
    public Map getHome();
}
public class CompanyB implements ICompanyB{

    public Map getTel() {
        HashMap hashMap = new HashMap();
        hashMap.put("tel", "151xxxx");
        return hashMap;
    }

    public Map getHome() {
        HashMap hashMap = new HashMap();
        hashMap.put("home", "shandong");
        return hashMap;
    }

    public Map getIDB() {
        HashMap hashMap = new HashMap();
        hashMap.put("id", "100");
        return hashMap;
    }

    public Map getInfo() {
        HashMap hashMap = new HashMap();
        hashMap.put("info", "fzj");
        return hashMap;
    }
    
}

3、A公司的系统要获得B公司系统的数据,但由于数据格式不同

这时就需要有一个中转角色,来对其进行转换,这里就用到了我们所讲的适配器模式

public class Adapter extends CompanyB implements ICompanyA{

    private Map home = super.getHome();
    private Map id = super.getIDB();
    private Map name = super.getInfo();
    private Map tel = super.getTel();
    
    public String getName() {
        return (String) name.get("info");
    }

    public String getPhone() {
        return (String) tel.get("tel");
    }

    public String getAddress() {
        return (String) home.get("home");
    }

    public String getID() {
        return (String) home.get("id");
    }

}

 4、以上的代码已经解决了两个接口不一致的问题,但是接下来思考一个问题:如果B公司使用了三个接口来负责员工信息管理的,而java又不支持多继承,这个问题要怎么解决

参考

[1] 《设计模式之禅》 秦小波

设计模式——适配器模式

原文:http://www.cnblogs.com/fonxian/p/5205589.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!