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