`
gong1208
  • 浏览: 557114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式(九)——适配器模式

阅读更多

适配器模式


适配器模式,不想讲概念,假设个情景:
公司现在要开发一个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 对象,这样,我们的系统基本不用修改什么程序员,所有的人员查询、调用跟本地一样样的。可以看出适配器模式主要就是用来整合这种不同结构,下面附上类图,有助于理解:



 

0
3
分享到:
评论

相关推荐

    浅析Java设计模式【2】——适配器

    浅析Java设计模式【2】——适配器

    设计模式——适配器模式(adapter)

    NULL 博文链接:https://lizhao6210-126-com.iteye.com/blog/1753041

    设计模式——适配器模式

    NULL 博文链接:https://wjy320.iteye.com/blog/2042323

    Adapter(适配器模式)

    走进设计模式之——适配器模式 (Adapter) 对应代码

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器...

    Java设计模式 版本2

    对象的克隆——原型模式,复杂对象的组装与创建——建造者模式,不兼容结构的协调——适配器模式,处理多维度变化——桥接模式,树形结构的处理——组合模式,扩展系统功能——装饰模式,深入浅出外观模式,实现对象...

    Python设计模式之适配器模式原理与用法详解

    设计模式——适配器模式 适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口.Adapter Pattern使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景:系统数据和

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    设计模式——JAVA.docx

    JAVA设计模式总结之23种设计模式 一:设计模式之六大原则 总原则:开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。 1.Abstract Factory(抽象工厂模式) 2.Adapter(适配器模式)......

    C语言图形设计参考资料

    pathtodriver——适配器驱动程序的寻找路径,“”表示在当前目录下(*.BGI) enum graphics_driver{DETECT,CGA,MCGA,EGA,EGA64,………,VGA,PC3270}; DETECT——自动检测所用显示适配器的类型,将相应的驱动程序装入,...

    design-pattern-java.pdf

    七个结构型模式 七个结构型模式 适配器模式-Adapter Pattern 不兼容结构的协调——适配器模式(一) 不兼容结构的协调——适配器模式(二) 不兼容结构的协调——适配器模式(三) 不兼容结构的协调——适配器模式...

    java设计模式

    目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第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 设计问题...

    24种设计模式介绍与6大设计原则

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    java和设计模式ppt教程

    java和设计模式ppt包含工厂模式、建造模式、原始模型模式、单例模式、结构模式、适配器、桥梁模式、合成模式、装饰模式、门面模式、享元模式、代理模式、行为模式、解释器模式、迭代子模式、调停者模式、备忘录模式...

    C++设计模式原理与实战视频课

    C++设计模式原理与实战视频课 1-1 课程介绍 1-2 导论UML和设计模式导论 ...3-1 适配器模式的定义、场景与实用工程技术:对象适配与类的适配 3-2 门面(外观)模式Facade的定义、场景与实用工程技术:LOD

Global site tag (gtag.js) - Google Analytics