适配器模式
适配器模式,不想讲概念,假设个情景:
公司现在要开发一个ERP系统,需要查询公司所有员工的信息,这个很好办,很快开发完了;然后来了个需求,公司收购了一家公司,该公司的组织结构与本公司不同,他们有自己的ERP系统,并且希望保留自己的ERP系统,但是总公司管理人员可不想使用两个ERP系统,他习惯了用总公司的ERP系统,所以,我们需要把子公司的ERP系统整合到总公司的ERP系统中,而总公司的ERP系统界面不变化。问题是我们发现,两个ERP系统的用于保存用户数据的数据结构是不同的,同时大家可能会问,这两个对象都不在一个系统中,你如何使用呢?(简单!RMI 已经帮我们做了这件事情,只要有接口,就可以把远程的对象当成本地的对象使用)那下边我们来看具体的代码实现:
总公司获取用户信息的接口
public interface IUserInfo {
/**
* getUsername:获得用户名称.
* @author gongyong
*/
String getUsername();
/**
* getUserPhone:获得用户电话号码.
* @author gongyong
*/
String getUserPhone();
}
实现:
public class UserInfo implements IUserInfo{
/**
* 该方法用户从数据库中查询一个人的名字.
* @see com.gy.designpattern.adapter.IUserInfo#getUsername()
*/
public String getUsername(){
return "这个人的名字是....";
}
/**
* 该方法从数据库中查询一个人的电话号码.
* @see com.gy.designpattern.adapter.IUserInfo#getUserPhone()
*/
public String getUserPhone(){
return "这个人的电话是....";
}
}
要使用该方法,如下:
public class Client {
public static void main(String [] args){
IUserInfo userInfo =new UserInfo();
userInfo.getUsername();
System.out.println(userInfo.getUsername());
}
然后,这是子公司的获取用户信息的接口
public interface IOuterUser {
/**
* getUserInfo:获得用户的信息,返回一个map.
* @author gongyong
*/
Map getUserInfo();
}
实现:
public class OuterUser implements IOuterUser{
/**
* 从数据库中查询用户的基本信息,然后返回到一个map中.
* @see com.gy.designpattern.adapter.IOuterUser#getUserInfo()
*/
@SuppressWarnings("rawtypes")
public Map getUserInfo(){
Map userInfoMap=new HashMap();
userInfoMap.put("username", "来自外部,这个人的名字是。。。");
userInfoMap.put("phone", "来自外部,这个人的号码是。。。");
return userInfoMap;
}
}
看到没,子公司获取的用户信息是保存在一个map中的,这样我们就没法使用总公司的getUsername方法来返回用户的基本信息,但是我们有办法,看下面:
public class OuterUserInfo extends OuterUser implements IUserInfo{
private Map outerUserInfo=super.getUserInfo();
/**
* 从数据查询用户名字.
* @see com.gy.designpattern.adapter.IUserInfo#getUsername()
*/
public String getUsername(){
String username=(String) outerUserInfo.get("username");
return username;
}
/**
* 从数据查询用户电话.
* @see com.gy.designpattern.adapter.IUserInfo#getUserPhone()
*/
@Override
public String getUserPhone(){
String phone=(String) outerUserInfo.get("phone");
return phone;
}
}
我们用一个OuterUserInfo 继承自OuterUser 然后强制其实现总公司的IUserInfo接口,这样就类似我们把子公司的类伪装成了总公司的
IUserInfo 接口,这样就可以像原来一样调用相同的接口获取用户信息啦,看如下调用方式
public class Client {
public static void main(String [] args){
//这是公司本部员工信息的获取方式
//IUserInfo userInfo =new UserInfo();
IUserInfo userInfo =new OuterUserInfo();
userInfo.getUsername();
System.out.println(userInfo.getUsername());
}
}
通过适配器,把OuterUser 伪装成我们系统中一个IUserInfo 对象,这样,我们的系统基本不用修改什么程序员,所有的人员查询、调用跟本地一样样的。可以看出适配器模式主要就是用来整合这种不同结构,下面附上类图,有助于理解:
分享到:
相关推荐
浅析Java设计模式【2】——适配器
NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1753041
NULL 博文链接:https://wjy320.iteye.com/blog/2042323
走进设计模式之——适配器模式 (Adapter) 对应代码
C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...
对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...
设计模式——适配器模式 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口.Adapter Pattern使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景:系统数据和
书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...
JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......
pathtodriver——适配器驱动程序的寻找路径,“”表示在当前目录下(*.BGI) enum graphics_driver{DETECT,CGA,MCGA,EGA,EGA64,………,VGA,PC3270}; DETECT——自动检测所用显示适配器的类型,将相应的驱动程序装入,...
七个结构型模式 七个结构型模式 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(一) 不兼容结构的协调——适配器模式(二) 不兼容结构的协调——适配器模式(三) 不兼容结构的协调——适配器模式...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
4.1AdapterPattern(适配器模式) 96 4.1.1定义 96 4.1.2现实中的实例——电脑电源适配器 97 4.1.3C#实例——化学数据银行 98 4.1.4Java实例——清洁系统 102 4.1.5优势和缺陷 104 4.1.6应用情景 104 4.2...
4.1AdapterPattern(适配器模式) 96 4.1.1定义 96 4.1.2现实中的实例——电脑电源适配器 97 4.1.3C#实例——化学数据银行 98 4.1.4Java实例——清洁系统 102 4.1.5优势和缺陷 104 4.1.6应用情景 104 4.2...
1.2 Smalltalk MVC中的设计模式 1.3 描述设计模式 1.4 设计模式的编目 1.5 组织编目 1.6 设计模式怎样解决设计问题 1.7 怎样选择设计模式 1.8 怎样使用设计模式 第二章 实例研究:设计一个文档编辑器 2.1 设计问题...
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...
C++设计模式原理与实战视频课 1-1 课程介绍 1-2 导论UML和设计模式导论 ...3-1 适配器模式的定义、场景与实用工程技术:对象适配与类的适配 3-2 门面(外观)模式Facade的定义、场景与实用工程技术:LOD