GOF 《设计模式》一书对Adapter模式是这样描述的:
     将一个类的接口转换成客户希望的另外一个接口。Adapter模式使原本由于接口不兼容而不能一起工作的类可以一起工作。

    这段话大致是说:我们需要一种方式,为一个功能正确但接口不合的对象创建一个新接口。例如,客户给我们如下需求:

1)  为都有“显示”(display)行为的点、线、正方形分别创建类。

2)  客户对象不必知道自己到底拥有点、线、还是正方形。它只需知道拥有这些形状中的一个。

也就是说,我们要用一个更高层次的概念将这些具体形状都涵盖进去,这个高层概念可以称为:“可显示的形状”。因此,我们需要创建一个接口Shape:

interface  Shape{
     public void  display();
}

现在客户忽然间有让我们给这个系统增加一个画圆的功能。这个看起来很简单,只需定义一个 Circle 类来实现 Shape 接口,但是我们要给它编写 display 方法,这可不是件简单的事,假如此时我们正好发现一个 XXCircle 类,它有一个方法刚好可以完成这个功能,那么有没有更好的方法来利用它呢,这时我们就要用到 Adapter 模式了。 XXCircle

class  XXCircle{
     public  void  displayCircle(){
       System. out .println( " 通过 XXCircle.displayCircle() 画圆 " );
    }
}

    Adapter

1)    对象 Adapter 模式,它依赖于一个对象(适配器)包含另一个对象 ( 被适配的对象 )

class CircleObject implements Shape{

public  XXCircle  circle ;
     public  CircleObject(XXCircle xxcircle){
     circle =xxcircle;
    }
     public  void  display() {
        circle .displayCircle(); 
    }
}
public  class  Client {
     public  static  void  main(String[] args) {
       XXCircle circle= new  XXCircle();
       CircleObject co = new  CircleObject(circle);
       co .display();
    }
}
2)     
class  CircleClass  extends  XXCircle  implements  Shape{
     public  void  display() {
        super .displayCircle();   
    }
}
public  class  Client {
     public  static  void  main(String[] args) {
       CircleClass cc= new  CircleClass();
       cc.display();
    }
}

    小结:Adapter模式是一个很常用的模式,它将一个(或多个)类的接口转换成我们需要类所具备的一个接口。它的实现方式是:创建一个具备所需接口的类,然后包装原有类的方法,这样实际上就包含了被适配的对象。它主要适用于以下几种情况:

1)  你希望使用他人编写的子程序或方法,因为你需要它所执行的功能。

2)  你无法将这个子程序直接加入程序中。

3)  子程序的接口或调用方式与需要使用它的相关对象不完全相同。