設計模式之抽象適配器模式08

設計模式之抽象適配器模式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
城南外
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章