這篇文章主要介紹了java中設計模式之適配器模式的相關資料,適配器模式將一個類別的介面轉換成客戶期望的另一個介面。適配器讓原本不相容的類別可以合作得親密無間,需要的朋友可以參考下
java中設計模式之適配器模式
前言:
適配器模式可以將一個類別或接口應用於另一個不同但是卻有聯繫的接口,主要的做法是通過聲明一個目標接口的實現類,在該類中聲明一個將被適配類別或介面(被適配器)作為參數的建構器和被適配者的實例,這樣在實作目標介面的時候就可以呼叫被適配器的實例,並且輔以一些額外的操作。適配器模式的主體有三個部分:適配者,適配器實作類別和被適配者。特定類別結構如下圖:
這裡將被適配器的物件以組合的方式放到適配器類別中,那麼被適配器及其實現者都可以使用該適配器。適配器模式的優點在於可以將不同類型但是工作目的相似的物件相容起來,而缺點在於,如果目標介面較大,那麼要進行相容工作就需要許多額外的程式碼。
以一個較不符合實際的例子來說明適配器模式。火雞和鴨子都是可以叫並且飛的,但是火雞和鴨子的叫聲不一樣,並且火雞也沒有鴨子飛得遠。如果想把一隻火雞假扮為一隻鴨子,就需要將火雞對象進行一些裝扮,這裡我們就可以聲明一個裝扮類,該裝扮類也是鴨子類型的一種,當火雞進入該裝扮之後就變成了一隻鴨子。具體的類別實作如下:
目標介面(鴨子介面):
public interface Duck { void quack(); void fly(); }
目標介面的正常實作(鴨子實作):
public class MallardDuck implements Duck { @Override public void quack() { System.out.println("Quack"); } @Override public void fly() { System.out.println("I'm flying"); } }
被適配器介面(火雞介面):
public interface Turkey { void gobble(); void fly(); }
被適配者一般實作(火雞類別):
public class WildTurkey implements Turkey { @Override public void gobble() { System.out.println("Gobble gobble"); } @Override public void fly() { System.out.println("I'm flying a short distance"); } }
適配器:
public class TurkeyAdapter implements Duck { private Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public void quack() { turkey.gobble(); } @Override public void fly() { for (int i = 0; i < 5; i++) { turkey.fly(); } } }
透過火雞適配器,我們將火雞適配成了一隻鴨子。這裡要說明的是,適配器模式與裝飾者模式都是對源對象進行裝飾,而達到一定的效果的,但是適配器模式和裝飾者模式的區別在於,適配器模式是適配源對象,使其能夠符合特定的接口,而裝飾者模式是對來源物件的功能的擴充,使其能做更多的工作。
以上是Java中關於適配器模式的實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!