我在几个地方已经看到过,在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
类正是如此 - 符合新界面&同时也是适应类型的。
答案 0 :(得分:0)
Java类中可以使用类适配器模式。资源:
以下是我就此主题提出的问题:How to wrap a java.lang.Appendable into a java.io.Writer?
答案是类适配器。