我对适配器设计模式的理解是,我们允许将现有类的接口用作另一个接口。
因此,每次我们在Java中扩展或实施类时,我们都在使用适配器模式?因此,这里的这一点代码使用了适配器设计模式?
public class car extends flyingMachine{
void drive(){}
@override
void fly(){}
}
在线模式上有很多信息,但没有什么可以澄清这个问题的信息。
否 - 继承不是适配器模式。
说您的 Car
与驱动器((方法(实际上应该用方法drive()
实现 Moveable
(。现在还有其他一些类别为Moveable
的参数。
public class MakeItSo
{
public void easeOnDown(Moveable thing)
{
thing.drive();
}
}
现在,假设您有一个很酷的新类Spaceship
由其他人提供,并且它具有方法warp()
。而且它不能实现Moveable
,但是您想使用MakeItSo
类。该怎么办?
这是适配器模式可以帮助的地方。在这种情况下,您创建了一个实现的新类(或者可能扩展,但在许多情况下这很困惑(Moveable
接口,但IS是:
- 使用太空飞船建造
- 允许drive()
方法调用warp()
方法
public class MoveableSpaceship implements Moveable
{
private Spaceship ship;
public MoveableSpaceship(Spaceship s)
{
ship = s;
}
@Override
public void drive()
{
ship.warp();
}
}
现在您可以做:
Spaceship enterprise = getSpaceship(); //from wherever
MoveableSpaceship ncc1701 = new MoveableSpaceship(enterprise);
MakeItSo doIt = new MakeItSo();
doIt.easeOnDown(ncc1701);
因此,即使MakeItSo.easeOnDown
仅知道Moveable
,并且Spaceship
未实现Moveable
,使用适配器模式,现在可以通过适配器模式将MakeItSo
类使用CC_16类。
注意:更新类以匹配我最初无法正确解释的评论。