java設計模式6 介面卡模式(Adapter)

2021-06-20 13:38:23 字數 2284 閱讀 8809

我們接著討論設計模式,上篇文章我講完了5種建立型模式,這章開始,我將講下7種結構型模式:介面卡模式、裝飾模式、**模式、外觀模式、橋接模式、組合模式、享元模式。其中物件的介面卡模式是各種模式的起源,我們看下面的圖:

介面卡模式將某個類的介面轉換成客戶端期望的另乙個介面表示,目的是消除由於介面不匹配所造成的類的相容性問題。主要分為三類:類的介面卡模式、物件的介面卡模式、介面的介面卡模式。首先,我們來看看類的介面卡模式,先看類圖:

核心思想就是:有乙個source類,擁有乙個方法,待適配,目標介面時targetable,通過adapter類,將source的功能擴充套件到targetable裡,看**:

public class source 

}

public inte***ce targetable

public class adapter extends source implements targetable 

}

adapter類繼承source類,實現targetable介面,下面是測試類:

public class adaptertest 

}

輸出:

this is original method!

this is the targetable method!

這樣targetable介面的實現類就具有了source類的功能。

物件的介面卡模式

基本思路和類的介面卡模式相同,只是將adapter類作修改,這次不繼承source類,而是持有source類的例項,以達到解決相容性的問題。看圖:

只需要修改adapter類的原始碼即可:

private source source;

super();

this.source = source;

} @override

public void method2()

@override

public void method1()

}測試類:

public class adaptertest 

}

輸出與第一種一樣,只是適配的方法不同而已。

第三種介面卡模式是介面的介面卡模式,介面的介面卡是這樣的:有時我們寫的乙個介面中有多個抽象方法,當我們寫該介面的實現類時,必須實現該介面的所有方法,這明顯有時比較浪費,因為並不是所有的方法都是我們需要的,有時只需要某一些,此處為了解決這個問題,我們引入了介面的介面卡模式,借助於乙個抽象類,該抽象類實現了該介面,實現了所有的方法,而我們不和原始的介面打交道,只和該抽象類取得聯絡,所以我們寫乙個類,繼承該抽象類,重寫我們需要的方法就行。看一下類圖:

這個很好理解,在實際開發中,我們也常會遇到這種介面中定義了太多的方法,以致於有時我們在一些實現類中並不是都需要。看**:

public inte***ce sourceable
public void method1(){}

public void method2(){}

} public void method1()

} public void method2()

} public static void main(string args)

}測試輸出:

the sourceable inte***ce's first sub1!

the sourceable inte***ce's second sub2!

達到了我們的效果!

講了這麼多,總結一下三種介面卡模式的應用場景:

類的介面卡模式:當希望將乙個類轉換成滿足另乙個新介面的類時,可以使用類的介面卡模式,建立乙個新類,繼承原有的類,實現新的介面即可。

java設計模式6 介面卡模式

介面卡 就是講以有的類通過介面卡轉化為我們需要的型別。介面卡起到了中間作用 如圖所示,介面卡的作用就像是充電器一樣 手機充電需要的是5v電壓,但是家裡插座出來的電壓220v 手機介面卡就是將其轉換為5v的過程 public class mobile 提供5v電壓的乙個介面 author zhy pu...

設計模式(6) 介面卡模式

將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式讓那些介面不相容的類可以一起工作。物件介面卡 一繼承一組合 類介面卡 多繼承 不推薦使用 在軟體構建過程中,由於應用環境的變化,常常需要把一些現存的物件放在新的環境中使用,但是新的環境要求的介面是現存物件所滿足不了的。抽象目標類 target 新的...

JAVA設計模式 介面卡模式

介面卡模式 要點 1 介面卡模式主要應用於 希望復用一些現存的類,但是介面又與復用環境要求不一致的情況 在遺留 復用 類庫遷移等方面非常有用。2 介面卡模式有物件介面卡和類介面卡兩種形式的實現結構,但是類介面卡採用 多繼承 的實現方式,帶來了不良的高耦合,所以一般不推薦使用。物件介面卡採用 物件組合...