設計模式之適配器模式

文章目錄

適配器模式

適配器模式(Adapter Pattern):Adapter 將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

  1. 適配器的應用場景:系統的數據和行爲都正確,但接口不符時,我們應該考慮用適配器,目的是使控制範圍之外的一個原有對象與某個接口匹配。適配器模式主要應用於希望複用一些現存類,但是接口又與複用環境要求不一致的情況。
    a.兩個類所做的事情相同或相似,但是具有不同的接口時要使用它,客戶端代碼可以統一調用同一接口,可以更簡單、更直接、更緊湊。
    b.在雙方都不太容易修改的時候再使用適配器模式適配,比如維護階段
    c.在設計階段,避免迎合第三方組件,也可以使用

  2. 適配器的兩種類型:
    a.類適配器模式
    b.對象適配器模式

  3. 缺省適配器:
    Default Adapter Pattern:當不需要實現一個接口所提供的所有方法時,可以先設計一個抽象類實該接口,並未接口中每個方法提供一個默認實現(空方法)。那麼該抽象類的子類可以選擇性的覆蓋父類的某些方法來實現需求,它適用於不想
    使用一個接口中所有方法的情況,又稱爲但接口適配器模式。缺省適配器模式是適配器模式的一種變體,其應用也較爲廣泛。在JDK類庫的事件處理包java.awt.event中廣泛使用了缺省適配器模式,如WindowAdapter、KeyAdapter、MouseAdapter等。

  4. 適配器優缺點:
    優點:
    a.將目標類和適配者類解耦,通過引入一個適配器類來重用現有的適配者類,無須修改原有結構。
    b.增加了類的透明性和複用性,將具體的業務實現過程封裝在適配者類中,對於客戶端類而言是透明的,而且提高了適配者的複用性,同一個適配者類可以在多個不同的系統中複用。
    c.靈活性和擴展性都非常好,通過使用配置文件,可以很方便地更換適配器,也可以在不修改原有代碼的基礎上增加新的適配器類,完全符合“開閉原則”。
    類適配器:由於適配器類是適配者類的子類,因此可以在適配器類中置換一些適配者的方法,使得適配器的靈活性更強。
    對象適配器:
    a.一個對象適配器可以把多個不同的適配者適配到同一個目標;
    b.可以適配一個適配者的子類,由於適配器和適配者之間是關聯關係,根據“里氏代換原則”,適配者的子類也可通過該適配器進行適配。
    缺點:
    類適配器:
    a.對於Java、C#等不支持多重類繼承的語言,一次最多隻能適配一個適配者類,不能同時適配多個適配者;
    b.適配者類不能爲最終類,如在Java中不能爲final類,C#中不能爲sealed類
    c。在Java、C#等語言中,類適配器模式中的目標抽象類只能爲接口,不能爲類,其使用有一定的侷限性。
    對象適配器缺點:
    a.與類適配器模式相比,要在適配器中置換適配者類的某些方法比較麻煩。如果一定要置換掉適配者類的一個或多個方法,可以先做一個適配者類的子類,將適配者類的方法置換掉,然後再把適配者類的子類當做真正的適配者進行適配,實現過程較爲複雜。
    6.適用場景:
    a.系統需要使用一些現有的類,而這些類的接口(如方法名)不符合系統的需要,甚至沒有這些類的源代碼。
    b.想創建一個可以重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章