我們接著討論設計模式,上篇文章我講完了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 介面卡模式有物件介面卡和類介面卡兩種形式的實現結構,但是類介面卡採用 多繼承 的實現方式,帶來了不良的高耦合,所以一般不推薦使用。物件介面卡採用 物件組合...