1. 程式人生 > >設計模式:學習筆記(10)——適配器模式

設計模式:學習筆記(10)——適配器模式

light .com rgs strong 接口 可能 兼容 不能 pan

設計模式:學習筆記(10)——適配器模式

引入適配器模式

我們身邊的適配器

適配器是什麽,你一定不難理解,因為現實中到處都是。比方說:如果你需要在歐洲國家使用美國制作的筆記本電腦,你可能需要一個交流電的適配器......

  技術分享圖片

圖中所示,交流電適配器位於兩者之間,它的工作是將歐式插座轉換成美式插座,好讓美式插頭可以插進這個插座得到電力

適配器改變了插座的接口,以符合美式筆記本電腦的需求。OO適配器和真實世界的適配器扮演者同樣的角色:將一個接口轉換成另一個接口,以符合客戶的期望

面向對象的適配器

  技術分享圖片

定義適配器模式

  適配器模式將一個類的接口,轉換成客戶期望的另一個接口。適配器讓原來接口不兼容的類可以合作無間。

相關類圖

  技術分享圖片

實例代碼

我們定義了一個鴨子接口

public interface Duck{
    public void quack();
    public void fly();
}  

綠頭鴨是鴨子的子類

public class MallarDuck implements Duck{
    public void quack()
    {
        System.out.println("Quack");
    }
    public void fly()
    {
        System.out.println("I am flying");
    }
}  

我們定義了一個火雞

public class WildTurkey{
    public void gobble()
    {
        System.out.println("Gobble gobble");
    }
    public void fly()
    {
        System.out.println("I am flying a short distance");
    }
}
我們想讓火雞來冒充鴨子,顯而易見,因為火雞的接口不同,我們不能公然拿來用,那麽我們編寫一個適配器
public class TurkeyAdapter implements Duck{
    WildTurkey turkey;
    public TurkeyAdapter(WildTurkey turkey)
    {
        this.turkey =turkey;
    }
    public void quack()
    {
        turkey.gobble();
    }
    public void fly()
    {
        turkey.fly();
    }
}
現在我們來測試我們的適配器
public static void main(String[] args) {
    MallarDuck duck =  new MallarDuck();
    WildTurkey turkey =new WildTurkey();
    Duck turkeyAdapter = new TurkeyAdapter(turkey);

    duck.fly();
    turkeyAdapter.fly();

    duck.quack();
    turkeyAdapter.quack();
}

設計模式:學習筆記(10)——適配器模式