一、适配器模式简介
使用adapter模式的意图是将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作
在以下情况下比较适合使用adapter模式:1、当你想使用一个已经存在的类,而它的接口不符合你的需求;2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作;3、你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口,对象适配器可以适配它的父亲接口。
共有两种适配器实现方式:对象适配模式和类适配器模式。
在对象适配器模式中,适配器容纳类的实例,然后适配器再调用被包裹对象方法:

在类适配器模式中,适配器继承被适配类,然后调用相应的方法:

参与者说明:
Target:定义Client使用的与特定领域相关的接口。
Client:与符合Target接口的对象的协同。
Adaptee:定义一个已经存在的接口,这个接口需要适配。
Adapter:对Adaptee的接口与Target接口进行适配。
二 、JDK中的适配器模式
众所周知,jdk中有两套不同的输入输出api,分别是面向字符流的输入输出api和面向字节流的输入输出api,面向字节流的输入输出始于jdk1.0,面向字符流的输入输出始于jdk1.1,虽然两套api提出的时间不同,但是很明显java设计者并不打算让这两套api泾渭分明,互不相关,所以它提供了InputStreamReader类实现面向字节的输入输出api向面向字符的输入输出api的转换,其中就使用了适配器模式,这几个类的类图如下:

很明显,这几个类用了对象适配器模式。
三、关于适配器模式的思考
适配器模式是结构型模式中的第一个,它的应用十分广泛,因为平时我们除了开发新系统外还需要维护现有系统,让现有接口满足新的需求(即转变接口)时一般都需要用到适配器模式。
可以想象,如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不幸的是,事实却是维护一个系统的代价往往是开发一个系统的数倍。软件开发讲究的高内聚低耦合就是为了降低后期维护的成本,而设计模式讲究的可扩展性也是希望后期系统扩展功能时尽量不要重写原有代码,例如适配器模式就能够达到不重写原来类的前提下,开发出新的接口,满足新的需求。
所以我觉得,设计模式很重要!