我对适配器设计模式的理解是,我们允许将现有类的接口用作另一个接口。
因此,每次在java中扩展或实现类时,我们都使用适配器模式吗?这段代码是使用适配器设计模式的吗?
public class car extends flyingMachine{
void drive(){}
@override
void fly(){}
}网上有很多关于这个模式的信息,但是没有什么能为我澄清这个问题。
发布于 2017-05-03 03:14:25
不继承不是适配器模式.
假设您有您的Car和驱动器()方法(它实际上应该实现一个接口,比如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,但使用适配器模式,现在可以通过适配器模式使用带有Spaceship对象的MakeItSo类。
注意:更新后的类与我最初没有正确解释的注释相匹配。
https://stackoverflow.com/questions/43750359
复制相似问题