我看懂的设计模式 、Adapter,适配器模式
2012-11-09 15:18
288 查看
Adapter,适配器模式:将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作那些类可以一起工作。
package com.cbf4life;
public interface IUserInfo {
public String getUserName();
public String getHomeAddress();
public String getMobileNumber();
public String getOfficeTelNumber();
public String getJobPosition();
public String getHomeTelNumber();
}
package com.cbf4life;
public class UserInfo implements IUserInfo {
public String getHomeAddress() {
System.out.println("这里是员工的家庭地址....");
return null;
}
public String getHomeTelNumber() {
System.out.println("员工的家庭电话是....");
return null;
}
public String getJobPosition() {
System.out.println("这个人的职位是BOSS....");
return null;
}
public String getMobileNumber() {
System.out.println("这个人的手机号码是0000....");
return null;
}
public String getOfficeTelNumber() {
System.out.println("办公室电话是....");
return null;
}
public String getUserName() {
System.out.println("姓名叫做...");
return null;
}
}
package com.cbf4life;
public class App {
public static void main(String[] args) {
//没有与外系统连接的时候,是这样写的
IUserInfo youngGirl = new UserInfo();
//从数据库中查到101个
for(int i=0;i<101;i++){
youngGirl.getMobileNumber();
}
}
}
//以上内容是没用适配器
package com.cbf4life;
import java.util.Map;
/**
* 外系统的人员信息
*/
@SuppressWarnings("all")
public interface IOuterUser {
public Map getUserBaseInfo();
public Map getUserOfficeInfo();
public Map getUserHomeInfo();
}
package com.cbf4life;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("all")
public class OuterUser implements IOuterUser {
public Map getUserBaseInfo() {
HashMap baseInfoMap = new HashMap();
baseInfoMap.put("userName", "这个员工叫混世魔王....");
baseInfoMap.put("mobileNumber", "这个员工电话是....");
return baseInfoMap;
}
public Map getUserHomeInfo() {
HashMap homeInfo = new HashMap();
homeInfo.put("homeTelNumbner", "员工的家庭电话是....");
homeInfo.put("homeAddress", "员工的家庭地址是....");
return homeInfo;
}
public Map getUserOfficeInfo() {
HashMap officeInfo = new HashMap();
officeInfo.put("jobPosition","这个人的职位是BOSS...");
officeInfo.put("officeTelNumber", "员工的办公电话是....");
return officeInfo;
}
}
//那怎么把外系统的用户信息包装成我们公司的人员信息呢?看下面的OuterUserInfo类源码,也就是我们的适配器:
package com.cbf4life;
import java.util.Map;
/**
* 把OuterUser包装成UserInfo
*/
@SuppressWarnings("all")
public class OuterUserInfo extends OuterUser implements IUserInfo {
private Map baseInfo = super.getUserBaseInfo();
private Map homeInfo = super.getUserHomeInfo();
private Map officeInfo = super.getUserOfficeInfo();
public String getHomeAddress() {
String homeAddress = (String)this.homeInfo.get("homeAddress");
System.out.println(homeAddress);
return homeAddress;
}
public String getHomeTelNumber() {
String homeTelNumber = (String)this.homeInfo.get("homeTelNumber");
System.out.println(homeTelNumber);
return homeTelNumber;
}
public String getJobPosition() {
String jobPosition = (String)this.officeInfo.get("jobPosition");
System.out.println(jobPosition);
return jobPosition;
}
public String getMobileNumber() {
String mobileNumber = (String)this.baseInfo.get("mobileNumber");
System.out.println(mobileNumber);
return mobileNumber;
}
public String getOfficeTelNumber() {
String officeTelNumber = (String)this.officeInfo.get("officeTelNumber");
System.out.println(officeTelNumber);
return officeTelNumber;
}
public String getUserName() {
String userName = (String)this.baseInfo.get("userName");
System.out.println(userName);
return userName;
}
}
package com.cbf4life;
public class App {
public static void main(String[] args) {
//没有与外系统连接的时候,是这样写的
//IUserInfo youngGirl = new UserInfo();
//老板一想不对呀,兔子不吃窝边草,还是找人力资源的员工好点
IUserInfo youngGirl = new OuterUserInfo(); //我们只修改了这一句好
for(int i=0;i<101;i++){
youngGirl.getMobileNumber();
}
}
}
//使用了适配器模式只修改了一句话,其他的业务逻辑都不用修改就解决了系统对接的问题,而且在我们实际系统中只是增加了一个业务类的继承,就实现了可以查本公司的
//员工信息,也可以查人力资源公司的员工信息
package com.cbf4life;
public interface IUserInfo {
public String getUserName();
public String getHomeAddress();
public String getMobileNumber();
public String getOfficeTelNumber();
public String getJobPosition();
public String getHomeTelNumber();
}
package com.cbf4life;
public class UserInfo implements IUserInfo {
public String getHomeAddress() {
System.out.println("这里是员工的家庭地址....");
return null;
}
public String getHomeTelNumber() {
System.out.println("员工的家庭电话是....");
return null;
}
public String getJobPosition() {
System.out.println("这个人的职位是BOSS....");
return null;
}
public String getMobileNumber() {
System.out.println("这个人的手机号码是0000....");
return null;
}
public String getOfficeTelNumber() {
System.out.println("办公室电话是....");
return null;
}
public String getUserName() {
System.out.println("姓名叫做...");
return null;
}
}
package com.cbf4life;
public class App {
public static void main(String[] args) {
//没有与外系统连接的时候,是这样写的
IUserInfo youngGirl = new UserInfo();
//从数据库中查到101个
for(int i=0;i<101;i++){
youngGirl.getMobileNumber();
}
}
}
//以上内容是没用适配器
package com.cbf4life;
import java.util.Map;
/**
* 外系统的人员信息
*/
@SuppressWarnings("all")
public interface IOuterUser {
public Map getUserBaseInfo();
public Map getUserOfficeInfo();
public Map getUserHomeInfo();
}
package com.cbf4life;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("all")
public class OuterUser implements IOuterUser {
public Map getUserBaseInfo() {
HashMap baseInfoMap = new HashMap();
baseInfoMap.put("userName", "这个员工叫混世魔王....");
baseInfoMap.put("mobileNumber", "这个员工电话是....");
return baseInfoMap;
}
public Map getUserHomeInfo() {
HashMap homeInfo = new HashMap();
homeInfo.put("homeTelNumbner", "员工的家庭电话是....");
homeInfo.put("homeAddress", "员工的家庭地址是....");
return homeInfo;
}
public Map getUserOfficeInfo() {
HashMap officeInfo = new HashMap();
officeInfo.put("jobPosition","这个人的职位是BOSS...");
officeInfo.put("officeTelNumber", "员工的办公电话是....");
return officeInfo;
}
}
//那怎么把外系统的用户信息包装成我们公司的人员信息呢?看下面的OuterUserInfo类源码,也就是我们的适配器:
package com.cbf4life;
import java.util.Map;
/**
* 把OuterUser包装成UserInfo
*/
@SuppressWarnings("all")
public class OuterUserInfo extends OuterUser implements IUserInfo {
private Map baseInfo = super.getUserBaseInfo();
private Map homeInfo = super.getUserHomeInfo();
private Map officeInfo = super.getUserOfficeInfo();
public String getHomeAddress() {
String homeAddress = (String)this.homeInfo.get("homeAddress");
System.out.println(homeAddress);
return homeAddress;
}
public String getHomeTelNumber() {
String homeTelNumber = (String)this.homeInfo.get("homeTelNumber");
System.out.println(homeTelNumber);
return homeTelNumber;
}
public String getJobPosition() {
String jobPosition = (String)this.officeInfo.get("jobPosition");
System.out.println(jobPosition);
return jobPosition;
}
public String getMobileNumber() {
String mobileNumber = (String)this.baseInfo.get("mobileNumber");
System.out.println(mobileNumber);
return mobileNumber;
}
public String getOfficeTelNumber() {
String officeTelNumber = (String)this.officeInfo.get("officeTelNumber");
System.out.println(officeTelNumber);
return officeTelNumber;
}
public String getUserName() {
String userName = (String)this.baseInfo.get("userName");
System.out.println(userName);
return userName;
}
}
package com.cbf4life;
public class App {
public static void main(String[] args) {
//没有与外系统连接的时候,是这样写的
//IUserInfo youngGirl = new UserInfo();
//老板一想不对呀,兔子不吃窝边草,还是找人力资源的员工好点
IUserInfo youngGirl = new OuterUserInfo(); //我们只修改了这一句好
for(int i=0;i<101;i++){
youngGirl.getMobileNumber();
}
}
}
//使用了适配器模式只修改了一句话,其他的业务逻辑都不用修改就解决了系统对接的问题,而且在我们实际系统中只是增加了一个业务类的继承,就实现了可以查本公司的
//员工信息,也可以查人力资源公司的员工信息
相关文章推荐
- 设计模式(三)-- 适配器模式(Adapter)
- Java设计模式之适配器模式Adapter(结构型)
- Android设计模式之适配器模式--adapter
- 设计模式之适配器模式(Adapter)
- 设计模式之适配器模式(Adapter Class/Object)
- Android设计模式--适配器模式--Adapter入门
- 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 具体解释
- 设计模式 笔记 适配器模式 Adapter
- 设计模式--适配器模式(Adapter)
- Java 常用设计模式-适配器模式adapter
- JAVA设计模式(06):结构型-适配器模式(Adapter)
- 设计模式(七):Adapter 适配器模式 -- 结构型模式
- .NET设计模式-适配器模式(Adapter Pattern)
- 设计模式之适配器模式 Adapter
- 【设计模式】适配器模式(Adapter Pattern)
- 设计模式之适配器模式(Adapter)
- 设计模式(六)之Adapter - 适配器模式
- Java:设计模式之适配器模式Adapter
- 设计模式--适配器模式Adapter(结构型)