0%

Java设计模式之适配器模式

当自身系统接入第三方系统(调用第三方接口)时,Model一般都是不一样的,解决方法一般有两种,一是单独为每个第三方接口开发相应的功能,二是使用适配器模式,把第三方返回的对象转换成我们系统定义的对象。使用适配器模式,是现有系统修改最小的方案。 下面的例子假设两个系统的User类定义不同,需要交互。 本地IUser接口:

package com.pocketdigi.patterns.adapter;

public interface IUser {
    public String getUserName();
    public String getUserId();
    public String getPassword();
}

实现类:

package com.pocketdigi.patterns.adapter;

public class UserImp implements IUser {
    String userName;
    String userId;
    String password;
    @Override
    public String getUserName() {
        // TODO Auto-generated method stub
        return userName;
    }

    @Override
    public String getUserId() {
        // TODO Auto-generated method stub
        return userId;
    }

    @Override
    public String getPassword() {
        // TODO Auto-generated method stub
        return password;
    }

}

另一个系统的User:

package com.pocketdigi.patterns.adapter;

/**
 * 假设这是另一个系统中的User对象
 * 
 */
public class UserInfo {
    String user;
    String id;
    String pwd;
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    
}

适配器模式又分对象适配器模式和类适配器模式 下面是类适配模式:

package com.pocketdigi.patterns.adapter;
/**
 * 类适配器模式
 */
public class UserAdapter1 extends UserInfo implements IUser {

    @Override
    public String getUserName() {
        // TODO Auto-generated method stub
        return this.getUser();
    }

    @Override
    public String getUserId() {
        // TODO Auto-generated method stub
        return this.getId();
    }

    @Override
    public String getPassword() {
        // TODO Auto-generated method stub
        return this.getPwd();
    }

}

对象适配模式:

package com.pocketdigi.patterns.adapter;
/**
 * 对象适配器模式
 */
public class UserAdapter2 implements IUser {
    UserInfo info;
    public UserInfo getInfo() {
        return info;
    }

    public void setInfo(UserInfo info) {
        this.info = info;
    }

    @Override
    public String getUserName() {
        // TODO Auto-generated method stub
        return info.getUser();
    }

    @Override
    public String getUserId() {
        // TODO Auto-generated method stub
        return info.getId();
    }

    @Override
    public String getPassword() {
        // TODO Auto-generated method stub
        return info.getPwd();
    }

}