为什么说Java中不能使用类适配器模式?

时间:2014-04-03 22:36:18

标签: java design-patterns

我在几个地方已经看到过,在Java中无法完成类适配器模式(包括 Head First:设计模式Implementing Class Adapter Pattern in Java在SO上)。我不明白为什么。

考虑以下适配器,目标接口和适配器代码:

要调整的对象(适应性)

class Adaptee{

   int id = 123;

   void doStuff(){ 
     /* Doing stuff */
   }

   int getId(){
       return id;
   }

}

目标界面

interface TheNewInterface{

     void doAction();

     int getId();
}

对象适配器

class ObjectAdapter implements TheNewInterface{
    Adaptee adaptee;

    ObjectAdapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }

    @Override
    void doAction(){
         adaptee.doStuff();
    }

    @Override
    int getId(){
         adaptee.getId();
    }


}

类适配器(??)

class ClassAdapter extends Adaptee implements TheNewInterface{

    @Override
    void doAction(){
         doStuff();
    }

    /**No need to provide an implementation of getId() as super class has it implemented*/
}

为什么说Java中不能使用类适配器? 提到的原因是Java不支持多重继承。

但根据定义,ClassAdapter类正是如此 - 符合新界面&同时也是适应类型的。