您的位置:首页 > 其它

我看懂的设计模式 、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();

}

}

}



//使用了适配器模式只修改了一句话,其他的业务逻辑都不用修改就解决了系统对接的问题,而且在我们实际系统中只是增加了一个业务类的继承,就实现了可以查本公司的

//员工信息,也可以查人力资源公司的员工信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: