設計模式之抽象適配器模式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
城南外