Clark To Do The blog of Clark

Java设计模式:适配器模式

注:本文为译文,原文出处java-design-patterns-in-stories

适配器模式在现代Java框架中被广泛应用.

它的场景为: 需要使用一个已经存在的类,并且它的接口与需求并不匹配; 或许你想创建一个可复用的类, 适配没有提供兼容接口的其它类。

1. 适配器模式的故事

适配器可以通过接下来这个简单的例子来加以说明. 样例的目的是将橘子适配为一个苹果.

Java Adapter Design Pattern

从图中下方部分可知, 适配器包含了一个橘子的实例, 并且继承自苹果. 似乎是在橘子获取了一个适配器的”皮肤”后, 它就拥有的苹果的行为了.

2. 适配器模式类图

adapter-pattern-class-diagram

3. 原型模式Java样例

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");
    }

}

事实上, 这可能是适配器模式最简单的例子了. 更加常用可能是双路适配器. 如果要创建双路适配器, 需要实现2个接口并包含2个实例. 但这仍是一个简单的实现.

4. 适配器模式在JDK中的应用

java.io.InputStreamReader(InputStream) (返回一个 Reader) java.io.OutputStreamWriter(OutputStream) (返回一个 Writer)

在实际中的大型框架, 这个模式的应用可能不是很明星.例如: Eclipse中适配器模式的应用就不易被发觉. 此篇文章是Escpise运行时对于适配器模式的分析.

comments powered by Disqus