描述:软件开发人力外包市场中,甲方有自己的一套人员管理系统,而乙方也有自己的一套管理系统,如果乙方派人力进驻到甲方工作,并且薪资待遇都按照甲方的要求,那么人员信息也要进驻到甲方的管理系统,乙方的那套系统就不能用了,这里就要将原来的乙方的管理系统适配成甲方要求的管理系统。适配模式分为类适配和对象适配,类适配要求适配器继承被适配的类且实现目标接口,而对象适配器是一种聚合,适配器依赖不同的被适配对象。
类适配UML类图:
对象适配器UML类图
由于类适配模式较简单,先以对象适配模式为例,测试代码如下:
1、被适配对象接口
package com.java.adapter;
import java.util.Map;
public interface IOuterUserPersonalInfo {
public Map getOutUserPersonalInfo();
}
package com.java.adapter;
import java.util.Map;
public interface IOuterUserSalaryInfo {
public Map getOutUserSalaryInfo();
}
package com.java.adapter;
import java.util.Map;
public interface IOuterUserTitleInfo {
public Map getOutUserTitleInfo();
}
2、倍适配对象接口实现类
package com.java.adapter;
import java.util.HashMap;
import java.util.Map;
public class OuterUserPersonalInfo implements IOuterUserPersonalInfo {
@Override
public Map<String, String> getOutUserPersonalInfo() {
Map<String, String> map = new HashMap<String, String>();
map.put("name", "zhansan");
return map;
}
}
package com.java.adapter;
import java.util.HashMap;
import java.util.Map;
public class OuterUserSalaryInfo implements IOuterUserSalaryInfo {
@Override
public Map<String, String> getOutUserSalaryInfo() {
Map<String, String> map = new HashMap<String, String>();
map.put("salary", "10000");
return map;
}
}
package com.java.adapter;
import java.util.HashMap;
import java.util.Map;
public class OuterUserTitleInfo implements IOuterUserTitleInfo {
@Override
public Map<String, String> getOutUserTitleInfo() {
Map<String, String> map = new HashMap<String, String>();
map.put("title", "软件开发工程师");
return map;
}
}
3、目标也就是甲方接口
package com.java.adapter;
public interface UserInfo {
public String getUserName();
public String getJobPosition();
public String getSalary();
}
4、适配器
package com.java.adapter;
import java.util.Map;
public class OutUserInfo implements IOuterUserPersonalInfo, IOuterUserSalaryInfo,
IOuterUserTitleInfo, UserInfo{
private IOuterUserPersonalInfo outerUserPersonalInfo = null;
private IOuterUserSalaryInfo outerUserSalaryInfo = null;
private IOuterUserTitleInfo outUserTitleInfo = null;
private Map<String, String> personalInfoMap = null;
private Map<String, String> salaryInfoMap = null;
private Map<String, String> titleInfoMap = null;
@SuppressWarnings("unchecked")
public OutUserInfo(IOuterUserPersonalInfo outerUserPersonalInfo,
IOuterUserSalaryInfo outerUserSalaryInfo,
IOuterUserTitleInfo outUserTitleInfo) {
this.outerUserPersonalInfo = outerUserPersonalInfo;
this.outerUserSalaryInfo = outerUserSalaryInfo;
this.outUserTitleInfo = outUserTitleInfo;
personalInfoMap = outerUserPersonalInfo.getOutUserPersonalInfo();
salaryInfoMap = outerUserSalaryInfo.getOutUserSalaryInfo();
titleInfoMap = outUserTitleInfo.getOutUserTitleInfo();
}
@SuppressWarnings("unchecked")
@Override
public Map<String, String> getOutUserTitleInfo() {
return outerUserPersonalInfo.getOutUserPersonalInfo();
}
@SuppressWarnings("unchecked")
@Override
public Map<String, String> getOutUserSalaryInfo() {
return outerUserSalaryInfo.getOutUserSalaryInfo();
}
@SuppressWarnings("unchecked")
@Override
public Map<String, String> getOutUserPersonalInfo() {
return outUserTitleInfo.getOutUserTitleInfo();
}
@Override
public String getUserName() {
System.out.println(personalInfoMap.get("name"));
return personalInfoMap.get("name");
}
@Override
public String getJobPosition() {
System.out.println(titleInfoMap.get("title"));
return titleInfoMap.get("title");
}
@Override
public String getSalary() {
System.out.println(salaryInfoMap.get("salary"));
return salaryInfoMap.get("salary");
}
}
5、测试类
package com.java.adapter;
public class AdapterTest {
public static void main(String[] args) {
OuterUserPersonalInfo personalInfo = new OuterUserPersonalInfo();
OuterUserSalaryInfo salaryInfo = new OuterUserSalaryInfo();
OuterUserTitleInfo titleInfo = new OuterUserTitleInfo();
OutUserInfo outUserInfo = new OutUserInfo(personalInfo, salaryInfo, titleInfo);
outUserInfo.getUserName();
outUserInfo.getJobPosition();
outUserInfo.getSalary();
}
}
6、测试结果:
zhansan
软件开发工程师
10000