設計模式之Adapter模式(適配器)
1。引言
一個螺絲和一個螺絲母,本質上沒有什么區別,一個插座和一個插線板,一個水龍頭和水管,一個飲水機和一個水桶,鎖和鑰匙,這些成對事物的事物本來沒有什么本質聯系,在面向對象的角度來說也不存在多的共性,但是又經常成對使用。
如何讓這些不兼容的類在一起和諧的工作呢,就需要使用結構性設計模式中的適配模式
2.定義與結構圖
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
結構圖:
3)如何實現
實現適配器模式有兩種方式,第一種是組合(Composition),第二種是繼承(Inheritance),一般情況下組合比繼承更加靈活,另外還有個 Pluggable Adapters ,支持插件的適配模式。這種方式主要利用反射來完成對公有成員的訪問。
4) 適配器模式在.net的應用
最大應用為 COM Interop ,Com Interop是com與.net之間的一個橋梁,通過它就可以透明的訪問com對象和.net對象,而忽視二者在設計結構上的區別 。
還有DataAdapter,這個我們經常使用,它將Connection,Command,DataSet對象組織起來,形成訪問數據的一個強大工具類。起到了數據庫與DataSet之間紐帶與橋梁的作用
一個螺絲和一個螺絲母,本質上沒有什么區別,一個插座和一個插線板,一個水龍頭和水管,一個飲水機和一個水桶,鎖和鑰匙,這些成對事物的事物本來沒有什么本質聯系,在面向對象的角度來說也不存在多的共性,但是又經常成對使用。
如何讓這些不兼容的類在一起和諧的工作呢,就需要使用結構性設計模式中的適配模式
2.定義與結構圖
將一個類的接口轉換成客戶希望的另外一個接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。
結構圖:
3)如何實現
實現適配器模式有兩種方式,第一種是組合(Composition),第二種是繼承(Inheritance),一般情況下組合比繼承更加靈活,另外還有個 Pluggable Adapters ,支持插件的適配模式。這種方式主要利用反射來完成對公有成員的訪問。
4) 適配器模式在.net的應用
最大應用為 COM Interop ,Com Interop是com與.net之間的一個橋梁,通過它就可以透明的訪問com對象和.net對象,而忽視二者在設計結構上的區別 。
還有DataAdapter,這個我們經常使用,它將Connection,Command,DataSet對象組織起來,形成訪問數據的一個強大工具類。起到了數據庫與DataSet之間紐帶與橋梁的作用
實現要點(以下引用出在TerryLee's Tech Space blog http://terrylee.cnblogs.com/archive/2006/02/18/333000.html)
1.Adapter模式主要應用于“希望復用一些現存的類,但是接口又與復用環境要求不一致的情況”,在遺留代碼復用、類庫遷移等方面非常有用。
2.Adapter模式有對象適配器和類適配器兩種形式的實現結構,但是類適配器采用“多繼承”的實現方式,帶來了不良的高耦合,所以一般不推薦使用。對象適配器采用“對象組合”的方式,更符合松耦合精神。
3.Adapter模式的實現可以非常的靈活,不必拘泥于GOF23中定義的兩種結構。例如,完全可以將Adapter模式中的“現存對象”作為新的接口方法參數,來達到適配的目的。
4.Adapter模式本身要求我們盡可能地使用“面向接口的編程”風格,這樣才能在后期很方便的適配。[以上幾點引用自MSDN WebCast]
作者:jillzhang
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
出處:http://jillzhang.cnblogs.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

浙公網安備 33010602011771號