(文章翻译自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. Android 实现蘑菇街购物车动画效果

    版本号:1.0  日期:2014.8.6 版权:© 2014 kince 转载注明出处   使用过蘑菇街的用户基本上都知道有一个增加购物车的动画效果,此处不详细描写叙述想知道的能够去下载体验一下. 1 ...

  2. 【SSH2(理论+实践)】--Hibernate步步(一个)

    前几个博客讨论SSH2该框架Struts,它代表层,集成封装.和使用WebWork作为核心处理,依赖映射是它的处理核心.在使用时需要Struts.xml配置相应Action和Interceptor够完 ...

  3. UVA 810 - A Dicey Problem(BFS)

    UVA 810 - A Dicey Problem 题目链接 题意:一个骰子,给你顶面和前面.在一个起点,每次能移动到周围4格,为-1,或顶面和该位置数字一样,那么问题来了,骰子能不能走一圈回到原地, ...

  4. Android Studio常见报错及处理办法

    在Android Studio上点了update,系统自动升级,自动重启Android Studio后,以前的项目Gradle正常编译: Unable to start the daemon proc ...

  5. OR1200数据Cache运用情景分析

    以下摘录<步骤吓得核心--软-core处理器的室内设计与分析>一本书 13.7DCache使用情景之中的一个--存储指令运行阶段DCache失靶 存储指令运行阶段DCache失靶这样的情景 ...

  6. XML DTD详解(转)

    前情提要与本文内容介绍 前面的两篇XML相关博文: 第一篇是介绍格式正规的XML: 格式正规的XML:语法 属性 实体 处理指令 样式单 CDATA节 第二篇介绍DTD,引入有效的XML的概念(符合语 ...

  7. iOS 8中CLLocationManager及MKMapView showUserLocation失败的解决的方法

    用XCode 6编译的原来XCode 5.1.1写的程序时,发现原来写的CLLocationManager定位的代码以及MKmapView的showUserLocation失效.查了一下,XCode ...

  8. Swift_3_功能

    import Foundation println("Hello, World!") //声明函数 不带参数 无返回值 func func1(){ } //一个函数 传入两个Str ...

  9. Visual Studio Code开发TypeScript

    [Tool] 使用Visual Studio Code开发TypeScript   [Tool] 使用Visual Studio Code开发TypeScript 注意 依照本篇操作步骤实作,就可以在 ...

  10. CSS定位与层叠

    position:static(静态定位)     当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位 ...