[英]Are we using the adapter design pattern everytime we extend a class and implements its interfaces methods?
我對適配器設計模式的理解是,我們允許將現有類中的接口用作另一個接口。
那么每次我們在Java中擴展或實現一個類時,我們都在使用適配器模式嗎? 那么這里的這段代碼是使用適配器設計模式的嗎?
public class car extends flyingMachine{
void drive(){}
@override
void fly(){}
}
在線模式中有很多信息,但是沒有什么可以為我澄清這個問題。
不-繼承不是適配器模式。
說你有你的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
,使用適配器模式,現在仍可以通過適配器模式將MakeItSo
類與Spaceship
對象一起使用。
注意:更新了類,以匹配我最初無法正確解釋的注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.