讀《HeadFirst設計模式》筆記之適配器模式

適配器模式:將一個類的接口,轉換成客戶指望的另外一個接口。適配器讓本來接口不兼容的類能夠合做無間java

一個圖很信息的說明適配器模式:this

                    

舉個栗子:3d

還記得策略模式中的鴨子嘛!如今有一個火雞想加入到鴨子的隊列中。但火雞不會呱呱的叫,只會咕咕的叫,能飛,但不能像鴨子(野鴨)飛那麼遠。那麼咱們就來包裝下吧。code

這是火雞的接口對象

public interface Turkey {
    public void gobble();
    public void fly();
}

火雞的實現:blog

public class WildTurkey implements Turkey {
    public void gobble() {
        System.out.println("Gobble gobble");
    }

    public void fly() {
        System.out.println("i am flying a short distance");
    }
}

還記得鴨子的接口嗎?接口

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

顯然火雞的接口和鴨子的接口不匹配,因此咱們來作一個適配器吧!隊列

public class TurkeyAdapter implements Duck {
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey) {
        this.turkey = turkey;
    }

    // 包裝叫聲,符合鴨子接口
    public void quack() {
        turkey.gobble();
    }

    // 包裝飛行,飛5次,追上鴨子的飛行距離
    public void fly() {
        for (int i = 0; i < 5; i++) {
            turkey.fly
        }
    }
}

咱們開始使用這個鴨子了:class

public class DuckTestDrive() {
    WildTurkey turkey = new WildTurkey();

    // 火雞假裝鴨子
    Duck turkeyAdapter = new TurkeyAdapter(turkey);
  
    turkeyAdapter.quack();

    turkeyAdapter.fly();
}

火雞成功假裝成鴨子了!那麼爲何火雞要假裝成鴨子呢?im

不想改變原有的兩個接口,又想讓兩個接口合做,那麼就用適配器實現兩個接口的對接

適配器模式和裝飾者模式區別:適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增長新的行爲和責任

相關文章
相關標籤/搜索