设计模式之抽象适配器模式08
背景
我们系统中的用户设计是IUserInfo(name,mobile,address),而这时要接入别的项目的用户数据。要做到的程度:既能查询到我们的数据,也能查询到别的系统的用户数据。
而这时,对方系统用户设置了基础信息,家庭信息。
数据结构不一致,我们做个适配器解决之。
类图
代码实现
我们系统中的用户接口
/**
* 内部系统用户接口
* @author chenlisong
*
*/
public interface IUserInfo {
public String getName();
public String getMobile();
public String getAddress();
}
我们系统中的用户实现
public class UserInfo implements IUserInfo{
public String getName() {
System.out.println("部门系统李四");
return null;
}
public String getMobile() {
System.out.println("1111");
return null;
}
public String getAddress() {
System.out.println("城北外");
return null;
}
}
我们给外部系统定义一个用户接口
public interface IOuterUser {
public Map<String, String> getBaseInfo();
public Map<String, String> getHomeInfo();
}
外部系统中用户的实现
public class OuterUser implements IOuterUser{
public Map<String, String> getBaseInfo() {
Map<String,String> baseInfo = new HashMap<String, String>();
baseInfo.put("name", "外部系统张三");
baseInfo.put("mobile", "2222");
return baseInfo;
}
public Map<String, String> getHomeInfo() {
Map<String,String> homeInfo = new HashMap<String, String>();
homeInfo.put("address", "城南外");
return homeInfo;
}
}
这时,我们强大的适配器巧妙的把对方的数据转化到我们的数据类型
public class UserAdapter extends OuterUser implements IUserInfo{
private Map<String,String> baseInfo = super.getBaseInfo();
private Map<String,String> homeInfo = super.getHomeInfo();
public String getName() {
System.out.println(baseInfo.get("name"));
return null;
}
public String getMobile() {
System.out.println(baseInfo.get("mobile"));
return null;
}
public String getAddress() {
System.out.println(homeInfo.get("address"));
return null;
}
}
客户端调用
public class Client {
public static void main(String[] args) {
System.out.println("inner system data...");
//before adapter
IUserInfo userInfo = new UserInfo();
userInfo.getName();
userInfo.getMobile();
userInfo.getAddress();
System.out.println();
System.out.println("outer system data...");
//after adapter
userInfo = new UserAdapter();
userInfo.getName();
userInfo.getMobile();
userInfo.getAddress();
}
}
调用结果如下:
inner system data...
部门系统李四
1111
城北外
outer system data...
外部系统张三
2222
城南外