`
gong1208
  • 浏览: 558934 次
  • 性别: 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
分享到:
评论

相关推荐

    设计模式——适配器模式

    通过阅读博客文章《设计模式——适配器模式》(链接:https://wjy320.iteye.com/blog/2042323),我们可以深入了解适配器模式的实现细节,包括具体的代码示例以及在实际项目中的应用案例。这个博客可能会讨论如何在...

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

    在阅读文章《设计模式——适配器模式(adapter)》时,你可以期待了解到更多关于适配器模式的实战案例、优缺点分析以及如何在实际项目中有效利用这一模式来解决问题。同时,提供的`adapter`压缩包文件可能包含示例...

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

    ### 浅析Java设计模式【2】——适配器 #### 概念解析 适配器模式是一种常用的设计模式,其核心在于“适配”二字,即如何将一个类的接口转换成客户希望的另一个接口。该模式使得原本由于接口不兼容而不能一起工作的...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式——刘伟

    设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。刘伟先生在讲解设计模式时,通常会深入浅出地介绍这些模式的原理、应用场景以及如何有效地在实际编程中应用它们。设计模式并不是...

    设计模式实验报告-适配器模式.docx

    ### 设计模式实验报告——适配器模式 #### 一、引言 设计模式是一种在特定情境下解决软件设计问题的通用解决方案。它为解决常见问题提供了一种可复用的设计思路,帮助开发者构建出更加灵活、易于维护的系统。在...

    设计模式代码——c#

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

    PHP设计模式介绍——CHM

    - 适配器模式:将一个类的接口转换成客户希望的另一个接口。 - 桥接模式:将抽象部分与实现部分分离,使它们可以独立变化。 - 组合模式:允许你将对象组合成树形结构,以表现“部分-整体”的层次结构。 - 装饰...

    设计模式——基于C#的工程化实现及扩展

    ### 设计模式——基于C#的工程化实现及扩展 #### 概述 本书旨在向读者展示如何利用C# 2.0语法有效地实现和应用设计模式,使其不仅仅局限于简单的例子,而是能够在实际工程项目中发挥重要作用。全书分为七个部分,...

    设计模式——GFour

    《设计模式——GFour》是一本深受IT从业者喜爱的经典书籍,尤其在C++开发者中具有广泛影响力。设计模式是软件工程领域中的一种最佳实践,它总结了在特定情境下解决问题的常见方法,使得代码可读性更强,复用性更高,...

    设计模式——原版的设计模式

    比如,适配器模式允许两个不兼容的接口协同工作;桥接模式将抽象部分与实现部分分离,使它们可以独立变化;装饰模式动态地给一个对象添加一些额外的职责;外观模式提供了一个统一的接口,用来访问子系统中的多个接口...

    Ruby设计模式编程之适配器模式实战攻略

    适配器模式是软件设计模式中的一种,它的主要目的是解决不同接口之间的兼容性问题,使得原本不兼容的类或接口能够协同工作。在Ruby这样的动态类型语言中,虽然类型检查不是强制性的,但适配器模式仍然有其重要的应用...

    新技术培训 培训讲义9_设计模式之单例适配器和工厂模式.doc

    设计模式是软件开发中的一种...总的来说,这三种设计模式——单例、适配器和工厂,都是为了提高软件的可维护性、可扩展性和灵活性。在实际开发中,理解并熟练运用这些模式可以帮助我们编写出更加优雅、易于维护的代码。

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...

    c#代码介绍23种设计模式-07适配器模式(附代码)

    解决这个问题的办法就是我们本文要介绍的适配器模式——使得新环境中不需要去重复实现已经存在了的实现而很好地把现有对象(指原来环境中的现有对象)加入到新环境来使用。 2. 类的适配器模式实现...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...

Global site tag (gtag.js) - Google Analytics