定義:適配器模式將某個類的接口轉換成客戶端期望的另一個接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協同工作。其別名為包裝器(Wrapper)。
屬于結構型模式
主要分為三類:類適配器模式、對象的適配器模式、接口的適配器模式。
本文定義:
需要被適配的類、接口、對象(我們有的),簡稱 src(source) 最終需要的輸出(我們想要的),簡稱 dst (destination,即Target) 適配器稱之為 Adapter 。
一句話描述適配器模式的感覺: src->Adapter->dst,即src以某種形式(三種形式分別對應三種適配器模式)給到Adapter里,最終轉化成了dst。
1 系統需要使用現有的類,而這些類的接口不符合系統的需要。 2 想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。 3 需要一個統一的輸出接口,而輸入端的類型不可預知。
一句話描述:Adapter類,通過繼承 src類,實現 dst 類接口,完成src->dst的適配。 我們通過一個最常用的例子來說明 生活中最常見的就是充電器,220V的交流電被轉換成5V的直流電,充電器在其中就擔當了適配器的功能
既然我們是進行適配,那就說明是基于某一個功能點的實現,所以我們先定義一個輸出220v交流電的功能,這個功能如下
/// <summary> /// 220V電壓 /// </summary> public class Voltage220 { public int output220v() { int src = 220; console.writeline("我是" + src + "伏電壓"); return src; } }
定義一個接口,接口的方法簽名是轉換(220V-5V)
/// <summary> /// 客戶需要的5V電壓接口 /// </summary> public interface Voltage5 { /// <summary> /// 輸出5V /// </summary> /// <returns></returns> int output5v(); }
接下去我們開始定義適配器類 !!!注意點 1、繼承后來的類 2、實現適配器接口
/// <summary> /// 類適配器 /// </summary> public class VoltageAdapter : Voltage220, Voltage5 { public int output5v() { int src = new Voltage220().output220v(); Console.WriteLine("適配器工作開始適配電壓"); int dst = src / 44; Console.WriteLine("適配完成后輸出電壓:" + dst); return dst; } }
此時我們需要一個設備,使用適配器查看功能是否正確 定義一個手機類,實現轉換功能 Mobile.charging(適配器 box1) 實例化手機,調用充電方法,形參是適配器的實例
/// <summary> /// 手機類 /// </summary> public class Mobile { /// <summary> /// 充電方法 /// </summary> /// <param name="voltage5"></param> public void charging(Voltage5 voltage5) { if (voltage5.output5v() == 5) { Console.WriteLine("電壓剛剛好5V,開始充電"); } else if (voltage5.output5v() > 5) { Console.WriteLine("電壓超過5V,都閃開 我要變成note7了"); } } }
功能實現
/// <summary> /// 類適配器 /// </summary> public static void ClassStart() { Console.WriteLine("===============類適配器=============="); Mobile mobile = new Mobile(); mobile.charging(new VoltageAdapter()); }
基本思路和類的適配器模式相同,只是將Adapter類作修改,這次不繼承src類,而是持有src類的實例,以解決兼容性的問題。 即:持有 src類,實現 dst 類接口,完成src->dst的適配。 (根據“合成復用原則”,在系統中盡量使用關聯關系來替代繼承關系,因此大部分結構型模式都是對象結構型模式。)
/// <summary> /// 對象適配器 /// </summary> public class VoltageAdapter2 : Voltage5 { private Voltage220 voltage220; public VoltageAdapter2(Voltage220 voltage220) { this.voltage220 = voltage220; } public int output5v() { int dst = 0; if (null != voltage220) { int src = voltage220.output220v(); Console.WriteLine("對象適配器工作,開始適配電壓"); dst = src / 44; Console.WriteLine("適配完成后輸出電壓:" + dst); } return dst; } }
功能實現
/// <summary> /// 對象適配器 /// </summary> public static void ObjectStart() { Console.WriteLine("===============對象適配器=============="); VoltageAdapter2 voltageAdapter2=new VoltageAdapter2(new Voltage220()); Mobile mobile = new Mobile(); mobile.charging(voltageAdapter2); }
對象適配器和類適配器其實算是同一種思想,只不過實現方式不同。 根據合成復用原則,組合大于繼承, 所以它解決了類適配器必須繼承src的局限性問題,也不再強求dst必須是接口。 同樣的它使用成本更低,更靈活
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
木門的十大品牌?1 .蒙田木門蒙恬木門成立于1989年,是木門行業的領導品牌。;的木門行業。它生產的各種木材質量優良,深受許多消費者的喜愛。2.塔塔木門塔塔門業成立于1999年,隸屬于北京億泰同創實業有限公司旗下品牌。amp這是一個最早從事研發的企業之一。amp在研發和生產室內門,具有卓越的品質和巨大的市場競爭力。3.展志天華木門展志天華是一家專注木業26年的大型家居建材企業。作為航天部門的合作伙...
李晨陽燕石年齡多大?1969年沈陽李晨陽出生45歲,閻石頭1962年出生50歲,那就和歌詞說再見吧?歌詞如下:隨著時間的流逝,我們終于分開了。沒有港口。這是永恒的停留。在我的腦海里,有一個鳳凰花的十字路口,有我最珍愛的朋友?;ㄩ_花落了好幾次,有時快樂,有時孤獨。我很高興我的生命在某個時刻一起度過,所以說再見,隨著時間的流逝,我們終于分開了。沒有永遠停留的港口。在我的腦海里,有一個鳳凰花的十字路口,...
北京到武漢高鐵多少公里?高鐵約1229公里。從北京到西部的武漢站,大概1229公里,一共24趟車。4小時17分至5小時44分,二等座票價520.5元。Z/T/K一等列車,北京西至漢口/武昌站,約1225公里,共20列。至少需要10小時29分鐘,硬座票價152.5元,硬臥票價261.5元。今年有望提速至350 km/h,將更加方便快捷。北京到武漢高鐵多少公里?北京至武漢高鐵列車32列,列車里程約12...