2014/7/19 适配器模式
来源:互联网 发布:苏联援助国民党 知乎 编辑:程序博客网 时间:2024/06/15 00:26
一:适配器模式例子
附上源码:
IUserInfo.java
package adapterPattern;public interface IUserInfo {public String getUserName();public String getHomeAddress(); public String getMobileNumber(); public String getOfficeTelNumber(); public String getJobPosition(); public String getHomeTelNumber();}
UserInfo.java
package adapterPattern;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("职位是");return null;}public String getMobileNumber() {System.out.println("手机号码是");return null;}public String getOfficeTelNumber() {System.out.println("办公室电话是");return null;}public String getUserName() {System.out.println("姓名是");return null;}}
IOuterUser.java
package adapterPattern;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("职位是");return null;}public String getMobileNumber() {System.out.println("手机号码是");return null;}public String getOfficeTelNumber() {System.out.println("办公室电话是");return null;}public String getUserName() {System.out.println("姓名是");return null;}}
OuterUser.java
package adapterPattern;import java.util.HashMap;import java.util.Map;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("homeTelNumber", "员工的家庭电话是...");homeInfo.put("homeAddress", "员工的家庭地址是...");return homeInfo;}public Map getUserOfficeInfo() {HashMap officeInfo = new HashMap();officeInfo.put("jobPosition", "这个人的职位是...");officeInfo.put("officeTelNumber", "员工的办公电话是...");return officeInfo;}}
OuterUserInfo.java
package adapterPattern;import java.util.Map;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("jobPositon");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;}}
Client.java
package adapterPattern;public class Client{public static void main(String[] args){IUserInfo youngGirl = new OuterUserInfo();for(int i=0;i<101;i++)youngGirl.getMobileNumber();}}
二:适配器模式的扩展:
如果其他公司提供的接口有多个,就不能让OuterUserInfo类继承多个实现类,因为Java不支持多继承。
解决方法:通过关联的方式与三个实现类进行通讯
附上源码:
IUserInfo.java与UserInfo.java参见上面代码
IOuterUserBaseInfo.java
package adapterPattern2;import java.util.Map;public interface IOuterUserBaseInfo {public Map getUserBaseInfo();}
IOuterUserHomeInfo.java
package adapterPattern2;import java.util.Map;public interface IOuterUserHomeInfo{public Map getUserHomeInfo();}
IOuterUserOfficeInfo.java
package adapterPattern2;import java.util.Map;public interface IOuterUserOfficeInfo {public Map getUserOfficeInfo();}
OuterUserBaseInfo.java
package adapterPattern2;import java.util.HashMap;import java.util.Map;public class OuterUserBaseInfo implements IOuterUserBaseInfo {public Map getUserBaseInfo() {HashMap baseInfoMap = new HashMap();baseInfoMap.put("userName", "这个员工叫...");baseInfoMap.put("mobileNumber", "这个员工电话是...");return baseInfoMap;}}
OuterUserHomeInfo.java
package adapterPattern2;import java.util.HashMap;import java.util.Map;public class OuterUserHomeInfo implements IOuterUserHomeInfo {public Map getUserHomeInfo() {HashMap homeInfo = new HashMap();homeInfo.put("homeTelNumber", "员工的家庭电话是...");homeInfo.put("homeAddress","员工的家庭地址是...");return homeInfo;}}
OuterUserOfficeInfo.java
package adapterPattern2;import java.util.HashMap;import java.util.Map;public class OuterUserOfficeInfo implements IOuterUserOfficeInfo {public Map getUserOfficeInfo() {HashMap officeInfo = new HashMap();officeInfo.put("jobPosition", "这个人的职位是...");officeInfo.put("officeTelNumber", "员工的办公电话是...");return officeInfo;}}
OuterUserInfo.java
package adapterPattern2;import java.util.Map;import adapterPattern.IUserInfo;//适配器public class OuterUserInfo implements IUserInfo{//源目标对象private IOuterUserBaseInfo baseInfo = null;private IOuterUserHomeInfo homeInfo = null;private IOuterUserOfficeInfo officeInfo = null;//数据处理private Map baseMap = null;private Map homeMap = null;private Map officeMap = null;//构造函数传递对象public OuterUserInfo(IOuterUserBaseInfo _baseInfo,IOuterUserHomeInfo _homeInfo,IOuterUserOfficeInfo _officeInfo){this.baseInfo = _baseInfo;this.homeInfo = _homeInfo;this.officeInfo = _officeInfo;//数据处理this.baseMap = this.baseInfo.getUserBaseInfo();this.homeMap = this.homeInfo.getUserHomeInfo();this.officeMap = this.officeInfo.getUserOfficeInfo();}public String getHomeAddress() {String homeAddress = (String) this.homeMap.get("homeAddress");System.out.println(homeAddress);return homeAddress;}public String getHomeTelNumber() {String homeTelNumber = (String)this.homeMap.get("homeTelNumber");System.out.println(homeTelNumber);return homeTelNumber;}public String getJobPosition() {String jobPosition = (String)this.officeMap.get("jobPosition");System.out.println(jobPosition);return jobPosition;}public String getMobileNumber() {String mobileNumber = (String) this.baseMap.get("mobileNumber");System.out.println(mobileNumber);return mobileNumber;}public String getOfficeTelNumber() {String officeTelNumber = (String)this.officeMap.get("officeTelNumber");System.out.println(officeTelNumber);return officeTelNumber;}public String getUserName() {String userName = (String)this.baseMap.get("userName");System.out.println(userName);return userName;}}
Client.java
package adapterPattern2;import adapterPattern.IUserInfo;public class Client {public static void main(String[] args){IOuterUserBaseInfo baseInfo = new OuterUserBaseInfo();IOuterUserHomeInfo homeInfo = new OuterUserHomeInfo();IOuterUserOfficeInfo officeInfo = new OuterUserOfficeInfo();//传递三个对象IUserInfo youngGirl = new OuterUserInfo(baseInfo,homeInfo,officeInfo);for(int i=0;i<101;i++)youngGirl.getMobileNumber();}}
注意:该例中的适配器为对象适配器,第一个例子的适配器是类适配器
类适配器与对象适配器的区别:
类适配器是类间继承,对象适配器是类的关联关系。参考书p219,225类图对比
三:总结:
适配器模式是一种“补救”模式,不是为了解决处于开发阶段的问题,而是解决正在服役的项目问题。
0 0
- 2014/7/19 适配器模式
- Chapter 7 适配器模式
- 设计模式-7-适配器模式
- 设计模式(7) ------- 适配器模式
- 适配器及适配器模式
- 适配器及适配器模式
- 适配器模式(类适配器)
- 适配器模式(默认适配器)
- 适配器模式(对象适配器)
- 适配器模式-类适配器
- 适配器模式-对象适配器
- 设计模式(7)-适配器模式(Adapter)
- 设计模式7--适配器模式(Adapter)
- Java设计模式7:适配器模式
- 设计模式(7)-Adapter 适配器模式
- 设计模式(7)--适配器模式
- 适配器模式
- 适配器模式
- 输入输出公共继承
- 详解struts.xml配置文件constant常量配置问题
- Fire Net 杭电1045(DFS)
- c语言之memset函数详解
- List和数组的相互转换
- 2014/7/19 适配器模式
- 第二课 Struts应用的web.xml文件
- 黑马程序员:图形用户界面
- 内嵌汇编简介(及部分特殊汇编语句识别)
- 惊艳的cygwin——Windows下的Linux命令行环境的配置和使用
- MySQL5.5配置主从复制_CentOS6.5下进行
- c++文件的格式与简单程序实例
- 复数类重载运算符3+
- hdu-1271 整数对