我们每次扩展类并实现其接口方法时都使用适配器设计模式吗?

时间:2017-05-03 03:02:07

标签: java design-patterns

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

所以每次我们在java中扩展或实现一个类时我们都在使用适配器模式?那么这里的代码是使用适配器设计模式吗?

public class car extends flyingMachine{

  void drive(){}

  @override
  void fly(){}

}

网上有很多关于这种模式的信息,但没有任何内容可以为我澄清这个问题。

1 个答案:

答案 0 :(得分:1)

否 - 继承不是适配器模式。

假设您的Car使用了您的drive()方法(实际上应该使用方法Moveable实现一个接口drive())。现在有一些其他类采用Moveable的参数。

public class MakeItSo
{
   public void easeOnDown(Moveable thing)
   { 
      thing.drive();
   }
}

现在假设您有一个由其他人提供的很酷的新课程Spaceship,并且它有一个方法warp()。并且它没有实现Moveable,但您想使用MakeItSo类。怎么办?

这是适配器模式可以提供帮助的地方。在这种情况下,您创建了一个新类,它实现(或者它可以扩展,但在许多情况下这是非常令人困惑的)Moveable接口,但是:    - 使用太空飞船建造    - 允许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只知道MoveableSpaceship没有实现Moveable,使用适配器模式现在可以使用MakeItSo {1}}通过适配器模式使用Spaceship对象的类。

注意:更新的课程与我最初未正确解释的评论相匹配。