UML
介绍
- 意图: 将一个类的接口转换成客户希望的另一个接口。使得原来由于接口不兼容而不能一起工作的类可以一起工作
- 优点: 1.可以让任何没有关联的类一起运行。2.提高了类的复用
- 缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。
- 应用举例: 1.linux 上运行windows程序。2.java 中的jdbc
例子
UML
IUserInfo(Target)
public interface IUserInfo {
String getUsername() ;
String getHomeAddress() ;
String getOfficeTelNumber() ;
String getJobPosition() ;
String getHomeTelNumber() ;
}
IOuterUser
import java.util.Map;
@SuppressWarnings("rawtypes")
public interface IOuterUser {
Map getUserBaseInfo() ;
Map getUserOfficeInfo() ;
Map getUserHomeInfo();
}
UserInfo
public class UserInfo implements IUserInfo{
@Override
public String getUsername() {
System.out.println("获取员工名字 --- 我是本公司的。。。。。");
return null;
}
@Override
public String getHomeAddress() {
System.out.println("获取员工地址 ------- ");
return null;
}
@Override
public String getOfficeTelNumber() {
System.out.println("获取员工工作电话-------- ");
return null;
}
@Override
public String getJobPosition() {
System.out.println("获取工作职位");
return null;
}
@Override
public String getHomeTelNumber() {
System.out.println("获取员工家庭电话");
return null;
}
}
OutUser(Adaptee)
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("all")
public class OuterUser implements IOuterUser{
@Override
public Map getUserBaseInfo() {
HashMap map = new HashMap() ;
map.put("username", "这个员工叫做某某某") ;
return map;
}
@Override
public Map getUserOfficeInfo() {
HashMap map = new HashMap() ;
map.put("officeTelNumber", "公司电话是7474774") ;
map.put("jobPosition", "俺们是boss") ;
return map;
}
@Override
public Map getUserHomeInfo() {
HashMap map = new HashMap() ;
map.put("homeAddress", "家庭地址...........") ;
map.put("homeTelNumber", "8748748748748774") ;
return map;
}
}
OuterUserInfo(Adapter)
import java.util.Map;
@SuppressWarnings("all")
public class OuterUserInfo extends OuterUser implements IUserInfo{
private Map<String , String> baseMap = super.getUserBaseInfo() ;
private Map<String , String> homeMap = super.getUserHomeInfo() ;
private Map<String , String> officeMap = super.getUserOfficeInfo() ;
@Override
public String getUsername() {
return baseMap.get("username");
}
@Override
public String getHomeAddress() {
return homeMap.get("homeAddress");
}
@Override
public String getOfficeTelNumber() {
return officeMap.get("officeTelNumber");
}
@Override
public String getJobPosition() {
return officeMap.get("jobPosition");
}
@Override
public String getHomeTelNumber() {
return homeMap.get("homeTelNumber");
}
}
Client
public class Client {
public static void main(String[] args) {
IUserInfo inUser = new UserInfo() ;
inUser.getUsername() ;
inUser.getHomeAddress() ;
inUser.getHomeTelNumber() ;
inUser.getJobPosition() ;
inUser.getOfficeTelNumber() ;
System.out.println("====================分割线==============");
IUserInfo outUser = new OuterUserInfo() ;
System.out.println(outUser.getUsername());
System.out.println(outUser.getHomeAddress());
System.out.println(outUser.getHomeTelNumber());
System.out.println(outUser.getJobPosition());
System.out.println(outUser.getOfficeTelNumber());
}
}
结果
获取员工名字 --- 我是本公司的。。。。。
获取员工地址 -------
获取员工家庭电话
获取工作职位
获取员工工作电话--------
====================分割线
这个员工叫做某某某
家庭地址...........
8748748748748774
俺们是boss
公司电话是7474774
参考
<<设计模式之禅>>
菜鸟教程