为什么说类适配器模式在Java中是不可能的?
我曾在几个地方提到,类适配器模式不能在Java中实现,包括Head-First:Design模式等等。我不明白为什么 考虑以下适配器、目标接口和适配器代码: 被改编对象 目标接口 对象适配器 类适配器 为什么说类适配器在Java中是不可能的? 原因是Java不支持多重继承为什么说类适配器模式在Java中是不可能的?,java,design-patterns,Java,Design Patterns,我曾在几个地方提到,类适配器模式不能在Java中实现,包括Head-First:Design模式等等。我不明白为什么 考虑以下适配器、目标接口和适配器代码: 被改编对象 目标接口 对象适配器 类适配器 为什么说类适配器在Java中是不可能的? 原因是Java不支持多重继承 但根据定义,ClassAdapter类正好符合新接口,同时也是adaptee类型。类适配器模式在Java中是可能的。资源: 有一个Java示例 关于这个问题,我问了一个问题: 答案是类适配器。我认为Java不支持对象适配器模式
但根据定义,ClassAdapter类正好符合新接口,同时也是adaptee类型。类适配器模式在Java中是可能的。资源: 有一个Java示例 关于这个问题,我问了一个问题:
答案是类适配器。我认为Java不支持对象适配器模式,因为Java不支持多重继承。类适配器模式工作得很好,因为它使用接口,这是Java对多重继承的回答。Java确实支持这里描述的对象适配器模式:他说的是适配器模式的一个特定变体,.No,因为这个变体依赖于多重继承。这就是为什么它不能在java中实现,因为java不支持多重继承。christopher已经在评论中回答了这个问题。@christopher说的与您的相反:我认为Java不支持对象适配器模式,因为Java不支持多重继承。类适配器模式运行良好,因为它使用接口,这是Java对多重继承的回答。@dcastro aliteralmind在这里是正确的;我相信你不小心误读了克里斯托弗的评论。该设计可通过使用接口实现。注意还明确提到:期望的接口通常被创建为纯接口类,特别是在Java等不支持多重继承的语言中。@JasonC我确实误读了aliteralmind的评论,但这意味着他错了。这是直接从报纸上发来的。类适配器使用多重继承,而对象适配器可以很好地实现,因为它使用组合。
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*/
}