我对适配器设计模式的理解是,我们允许将现有类的接口用作另一个接口。
所以每次我们在java中扩展或实现一个类时我们都在使用适配器模式?那么这里的代码是使用适配器设计模式吗?
public class car extends flyingMachine{
void drive(){}
@override
void fly(){}
}
网上有很多关于这种模式的信息,但没有任何内容可以为我澄清这个问题。
答案 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
只知道Moveable
,Spaceship
没有实现Moveable
,使用适配器模式现在可以使用MakeItSo
{1}}通过适配器模式使用Spaceship
对象的类。
注意:更新的课程与我最初未正确解释的评论相匹配。