簡體   English   中英

我們是否在每次擴展類並實現其接口方法時都使用適配器設計模式?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM