每当我们扩展一个类并实现其接口方法时,我们是否使用适配器设计模式



我对适配器设计模式的理解是,我们允许将现有类的接口用作另一个接口。

因此,每次我们在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类。

注意:更新类以匹配我最初无法正确解释的评论。

相关内容

最新更新