Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们是否每次扩展类并实现其接口方法时都使用适配器设计模式?_Java_Design Patterns - Fatal编程技术网

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

Java 我们是否每次扩展类并实现其接口方法时都使用适配器设计模式?,java,design-patterns,Java,Design Patterns,我对适配器设计模式的理解是,我们允许将现有类中的接口用作另一个接口 所以每次我们在java中扩展或实现一个类时,我们都在使用适配器模式?这段代码使用的是适配器设计模式 public class car extends flyingMachine{ void drive(){} @override void fly(){} } 网上有很多关于这一模式的信息,但没有什么能为我澄清这个问题 否-继承不是适配器模式 假设你有你的车和你的驾驶方法,这真的应该实现一个接口说移动和驾驶方法

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

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

public class car extends flyingMachine{

  void drive(){}

  @override
  void fly(){}

}

网上有很多关于这一模式的信息,但没有什么能为我澄清这个问题

否-继承不是适配器模式

假设你有你的车和你的驾驶方法,这真的应该实现一个接口说移动和驾驶方法。现在还有一些其他类接受Moveable参数

现在让我们假设你有一艘由其他人提供的很酷的新型宇宙飞船,它有一个方法扭曲。它没有实现Moveable,但是您希望使用MakeItSo类。怎么办

这就是适配器模式可以提供帮助的地方。在这种情况下,您将创建一个实现或可以扩展的新类,但在许多情况下,这会使Moveable接口非常混乱,但是: -用宇宙飞船建造的 -允许drive方法调用warp方法

现在您可以执行以下操作:

Spaceship enterprise = getSpaceship();  //from wherever
MoveableSpaceship ncc1701 = new MoveableSpaceship(enterprise);
MakeItSo doIt = new MakeItSo();
doIt.easeOnDown(ncc1701);
因此,即使MakeItSo.easeOnDown只知道Moveable,而宇宙飞船没有实现Moveable,使用适配器模式,现在可以通过适配器模式将MakeItSo类与宇宙飞船对象一起使用


注意:更新了类以匹配我最初没有正确解释的注释。

否。适配器就像一个装饰器,将一种类型的类调整为另一种类型。例如,拿一辆现有的汽车,让它能够。更好。好吧,让我编辑一下我的问题,看看我是否知道你的意思。我觉得Movable Spaceship可以是一个更好的名字。MakeItSo和easeOnDown方法是什么让我的头扭曲了lol他们在做什么?MakeItSo类有一个easeOnDown方法。。。这允许将任何可移动对象传递给它,并且它将调用在指定参数的可移动接口中定义的驱动方法。关键是,有可能将一艘没有实现可移动接口且没有驱动方法的宇宙飞船改造成一种可以在任何需要可移动对象的地方使用的对象。啊,我们这是一个不实现可移动的类,但我们想在其中使用宇宙飞船,但无法访问其warp方法?因此,我们使用我们的适配器使moveable类必须实现的驱动方法扭曲宇宙飞船?@MickO'Gorman,可以作为ClassAdapterinheritence或ObjectAdaptercomposition实现,moveable宇宙飞船示例。
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);