设计模式(13)-适配器模式

定义
适配器模式用于对象的整合,通常在项目改造时应用.

实例
A系统需要接入B系统的的用户信息,但是B系统的中的用户类与A系统不同,此时需要将B系统的用户类适配到A系统使用.一般通过新建newB类,集成B用户类,实现A用户类的接口.

1.A系统用户类接口

public interface IUserInfo {
    public String getUserName();    //姓名
    public String getPhoneNumber(); //电话
    public String getAddress(); //地址
}

2.A系统用户类实现

public class UserInfo implements IUserInfo{
    @Override
    public String getUserName() {
        return "内部员工的姓名是:张三!!!";
    }

    @Override
    public String getPhoneNumber() {
        return "内部员工的电话是:18199999999!!!";
    }

    @Override
    public String getAddress() {
        return "内部员工的地址是:南京市...";
    }
}

3.B系统用户类实现

public class OutUser {
    public HashMap<String,String> getBaseInfoMap(){
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("userName", "李四");
        return map;
    }

    public HashMap<String,String> getHomeMap(){
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("address", "武汉市");
        return map;
    }

    public HashMap<String,String> getOfficeMap(){
        HashMap<String,String> map = new HashMap<String,String>();
        map.put("phoneNumber", "18100000000");
        return map;
    }
}

4.适配器实现

public class OutUserInfoAdapter extends OutUser implements IUserInfo{
    @Override
    public String getUserName() {
        return super.getBaseInfoMap().get("userName");
    }

    @Override
    public String getPhoneNumber() {
        return super.getOfficeMap().get("phoneNumber");
    }

    @Override
    public String getAddress() {
        return super.getHomeMap().get("address");
    }
}

5.运行

public class Client {
    public static void main(String[] args) {
        IUserInfo user = new UserInfo();
        IUserInfo outUser = new OutUserInfoAdapter();

        System.out.println(user.getUserName());
        System.out.println(user.getPhoneNumber());
        System.out.println(user.getAddress());

        System.out.println(outUser.getUserName());
        System.out.println(outUser.getPhoneNumber());
        System.out.println(outUser.getAddress());
    }
}

结果:

内部员工的姓名是:张三!!!
内部员工的电话是:18199999999!!!
内部员工的地址是:南京市...
李四
18100000000
武汉市

猜你喜欢

转载自blog.csdn.net/chixiaoen/article/details/79409717