適配器模式:將一個類的接口,轉換成客戶指望的另外一個接口。適配器讓本來接口不兼容的類能夠合做無間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
不想改變原有的兩個接口,又想讓兩個接口合做,那麼就用適配器實現兩個接口的對接
適配器模式和裝飾者模式區別:適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增長新的行爲和責任