(文章翻译自Java Design Pattern: Adapter)

适配器模式在现在的Java框架中被频繁的用到。

当你想去使用一个存在的类而且它的接口和你需要的不吻合,或者是你想去创建一个可复用的类但是这个需要和一个没有关系的类和不兼容的接口协作的时候,那么就可以用到适配器模式了。

1.适配器的来历

适配器是思想可以通过下面的简单例子来演示。下面例子的目的就是使一个橘子能够适配一个苹果。

在图的下部分,适配器有一个Orange实例,而且是继承自苹果的。它看起来一个橘子对象获取了一个适配器的皮肤,但是它可以看起来像是一个苹果对象。

2.适配器类图

3.适配器模式Java代码


Adapter pattern is frequently used in modern Java frameworks. It comes into place when you want to use an existing class, and its interface does not match the one you need, or you want to create a reusable class that cooperates with unrelated classes with incompatible interfaces. 1. Adapter pattern story The Adapter idea can be demonstrated with the following simple example. The purpose of the sample problem is to adapt an orange as an apple. Java Adapter Design Pattern From the lower diagram, the adapter contains an instance of Orange, and extends Apple. It seems to be that after an Orange object gets a adapter skin, it acts like an Apple object now. 2. Adapter class diagram adapter-pattern-class-diagram 3. Adapter pattern Java code class Apple {
public void getAColor(String str) {
System.out.println("Apple color is: " + str);
}
} class Orange {
public void getOColor(String str) {
System.out.println("Orange color is: " + str);
}
} class AppleAdapter extends Apple {
private Orange orange; public AppleAdapter(Orange orange) {
this.orange = orange;
} public void getAColor(String str) {
orange.getOColor(str);
}
} public class TestAdapter {
public static void main(String[] args) {
Apple apple1 = new Apple();
Apple apple2 = new Apple();
apple1.getAColor("green"); Orange orange = new Orange(); AppleAdapter aa = new AppleAdapter(orange);
aa.getAColor("red");
} }

4.在Java标准开发包中使用适配器模式

java.io.InputStreamReader(InputStream) (返回 a Reader)

java.io.OutputStreamWriter(OutputStream) (返回 a Writer)

在实际更大的框架中,这个应用可能不会这么明显。例如适配器的思想在Eclipse中的使用不是那么容易发现的。

[译]Java 设计模式之适配器的更多相关文章

  1. Java设计模式之适配器设计模式(项目升级案例)

    今天是我学习到Java设计模式中的第三个设计模式了,但是天气又开始变得狂热起来,对于我这个凉爽惯了的青藏人来说,又是非常闹心的一件事儿,好了不管怎么样,目标还是目标(争取把23种Java设计模式接触一 ...

  2. [译]Java 设计模式之单例

    (文章翻译自Java Design Pattern: Singleton) 单例是在Java最经常被用到的设计模式.它通过阻止其他的实例化和修改来用于控制创建对象的数目.这一特性可应用于那些当只有一个 ...

  3. [译]Java 设计模式之桥接

    (文章翻译自Java Design Pattern: Bridge) 简单来说,桥梁设计模式是一个两层的抽象. 桥接模式就是从一个抽象中实现中解耦以便两个都可以独立的改变.桥接使用封装聚合而且使用继承 ...

  4. [译]Java 设计模式之装饰器

    (文章翻译自Java Design Pattern: Decorator – Decorate your girlfriend) 1.装饰模式的来历 让我们假设你在寻找一个女朋友.有来自像没美国中国日 ...

  5. [译]Java 设计模式 之模板方法

    (文章翻译自Java Design Pattern: Template Method) 模板方法设计模式定义了归档特定操作的工作流.它允许子类去修改特定的步奏而不用改变工作流的结构. 下面的例子表示模 ...

  6. [译]Java 设计模式之工厂

    (文章翻译自Java Design Pattern: Factory) 1.Java工厂模式的来历 工厂设计模式用于创建基于不同参数的对象.下面的例子就是在一个工厂里创建一个人.如果我们向工厂要一个b ...

  7. [译]Java 设计模式之外观

    (文章翻译自Java Design Pattern: Facade) 外观设计模式隐藏了任务的复杂性而只是提供了一个简单的接口.一个非常好的例子就是计算机的启动.当一个计算机启动的时候,它涉及CUP. ...

  8. [译]Java 设计模式之命令

    (文章翻译自Java Design Pattern: Command) 命令设计模式在进行执行和记录的时候需要一个操作及其参数和封装在一个对象里面.在下面的例子中,命令是一个操作,它的参数是一个Com ...

  9. [译]Java 设计模式之中介者

    (文章翻译自Java Design Pattern: Mediator) 中介者设计模式被用于一组的同事进行协作.这些同事不彼此进行直接的交流联系,但是是通过中介者. 在下面的例子中,A同事想去说话, ...

随机推荐

  1. JBPM4实例教程

    JBPM语言概述:全名  Java Business Process Management  ,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可运行流程语言框架. 是开源 ...

  2. ssis 到别的表查找临时变量值

    原文:ssis 到别的表查找临时变量值 etl过程过,往一个数据库表插入数据,插入的值往往需要到另外一个数据库读取.例如下面的客户跟踪,需要一个"项目ID",这个ID需要到另一个数 ...

  3. WiX Toolset

    原文:WiX Toolset 公司换软件打包平台,弄了一个月,Wix toolset的中文资料真的不多,逼着自己看了不少英文资料,终于弄懂了WiX打包的过程,做出了满足要求的安装包 一点基本概念:(F ...

  4. swift UI特殊培训38 与滚动码ScrollView

    有时我们适合页面的全部内容,我们需要使用ScrollView,额外的内容打通滚动. 什么样的宽度和高度首先,定义,健身器材轻松. let pageWidth = 320 let pageHeight ...

  5. [Cocos2d-x]Cocos2d-x 3.2 学习笔记

    获取屏幕大小(Visible) Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Direc ...

  6. iOS ... NS_REQUIRES_NIL_TERMINATION

    看到官方的一个样例不错,这里留记. #import <Cocoa/Cocoa.h> @interface NSMutableArray (variadicMethodExample) - ...

  7. Drupal 7.31 SQL注射分析POC

    此漏洞昨日爆发 ,我们有时间去看看今天的代码. 于Drupal于,跑sql声明使用PDO型号,这是一般能够避免大部分的注射,由于使用占位符的sql语法语句是限制. 但是,这并不意味着绝对安全,. 在D ...

  8. 用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能

    一.搭建開始前的准备 1.我用的MyEclipse2014版,大家也能够用IDEA. 2.下载Tomcat(免安装解压包).MySQL(zip包下载地址 免安装解压包,优点就是双击启动,最后我会把ba ...

  9. HDU 2070 Fibbonacci Number

    Fibbonacci Number Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  10. linux 虚拟文件系统

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vfs/ Linux 允许众多不同的文件系统共存,并支持跨文件系统的文件操作,这是因为有虚拟文件 ...