当自身系统接入第三方系统(调用第三方接口)时,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();
}
}