設計模式:學習筆記(10)——適配器模式
阿新 • • 發佈:2018-05-20
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)——適配器模式