通常,客户类 通过类的接口访问它提供的服务。有时,现有的类 可以提供客户类的功能需要,但是它所提供的接口不一定是客户类所期望的。这是由于现有的接口太详细或者缺乏详细或接口的名称与客户类所查找的不同等诸多不同原因导致的。
 
      在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能。适配器模式可以完成这样的转化。适配器模式建议定义一个包装类,包装有不兼容接口的对象。这个包装类指的就是适配器(Adapter),它包装的对象就是适配者(Adaptee).适配器提供客户类需要的接口,适配器接口的实现是把客户类的请求转化为对适配者的相应接口的调用。换句话说:当客户类调用适配器的方法时,在适配器类的内部调用适配者类的方法,这个过程对客户类是透明的,客户类并不直接访问适配者类。因此,适配器可以使由于借口不兼容而不能交互的类可以一起工作

适配器总体上可以分为两类:类适配器( Class Adapter) 和对象适配器 (Object Adapter)

adapter.bmp

类适配器:

目标角色:

package  adapter;
public    interface  Target {
    
// 源类中也有该方法
     void  sampleOperator1();
    
// 源类中无该方法
     void  sampleOperator2();
}

源角色:

package  adapter;
public   class  Adaptee {
    
// 源类中只有方法sampleOperator1
     public   void  sampleOperator1() {}
}

适配器角色:

package  adapter;
public   class  Adapter  extends  Adaptee  implements  Target {
    
// 由于源类中没有方法sampleOperator2
    
// 所以在配置器类中补上
     public   void  sampleOperator2() {}
}


对象适配器:

目标角色和源角色与类适配器一样,适配器角色如下:

package  adapter;
public   class  Adapter   implements Target{

    
private Adaptee adaptee;
    
    
public Adapter(Adaptee adaptee){
        
this.adaptee=adaptee;
    }

    
    
//源类中有方法sampleOperator1
    
//在适配器中直接委派
    public void sampleOperator1(){
        adaptee.sampleOperator1();
    }

    
    
//源类中没有方法sampleOperator2
    
//在适配器类中给补上
    public void sampleOperator2(){
        
//具体实现
    }

}

参考资料:http://www.javaresearch.org/article/showarticle.jsp?column=31&thread=39863
 《Java与模式》