應用場景 在軟體系統中,經常會需要將一些現成的對象放到新的環境中使用,但是新的環境要求的介面,是這些現存對象所不能滿足的。如何能利用現有的對象,又能滿足新的引用環境所需的介面? 適配器優點 更好的復用性。如果功能已經存在,只是介面不相容,通過適配器模式就可以讓這些功能得到更好的復用。 適配器缺點 由 ...
應用場景
在軟體系統中,經常會需要將一些現成的對象放到新的環境中使用,但是新的環境要求的介面,是這些現存對象所不能滿足的。如何能利用現有的對象,又能滿足新的引用環境所需的介面?
適配器優點
更好的復用性。如果功能已經存在,只是介面不相容,通過適配器模式就可以讓這些功能得到更好的復用。
適配器缺點
由於Adapter的存在,會提供系統的複雜度。
類圖
需求
生活中,比如經常用蘋果手機的人,出門在外可能沒帶蘋果充電線,這時周圍的人只有安卓充電線,那麼如何給我們的蘋果手機充電呢?一般都是有個第三方的轉換器供我們使用。我們來看看具體到編程中怎麼實現呢?
使用適配器的代碼
/// <summary> /// 安卓充電介面 /// </summary> public class AndroidChargeAdapte { public void AndroidCharge() { Console.WriteLine("安卓充電線充電!"); } } /// <summary> /// 客戶期待的充電介面 相當於我們類圖中的Target /// </summary> public interface IPhoneCharge { public void PhoneCharge(); } /// <summary> /// 將已有的安卓充電介面轉換成蘋果介面 /// </summary> public class PhoneChargeAdapter : IPhoneCharge { //在adapter中封裝了一個adapte對象,這個對象才是實現功能的對象; private AndroidChargeAdapte androidChargeAdapte=new AndroidChargeAdapte(); public void PhoneCharge() { androidChargeAdapte.AndroidCharge(); } }
//C#控制台調用 Console.WriteLine("適配器設計模式!"); IPhoneCharge phoneCharge=new PhoneChargeAdapter(); phoneCharge.PhoneCharge();
適配器模式也屬於結構性設計模式,比較簡單,整體實現只要掌握好類圖中的3要素就行。
1、目標角色(target):這是客戶鎖期待的介面。目標可以是具體的或抽象的類,也可以是介面。
2、適配者角色(adaptee):已有介面,但是和客戶器期待的介面不相容。
3、適配器角色(adapter):將已有介面轉換成目標介面。
總結
編程中,適配器模式我用到的比較少,今天學習了一下,分享給大家,有何疑問,歡迎交流。
作者:realyrare
出處:https://www.cnblogs.com/mhg215/
聲援博主:如果您覺得文章對您有幫助,請點擊文章末尾的【關註我】吧!
別忘記點擊文章右下角的【推薦】支持一波。~~~///(^v^)\\\~~~ .
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
如果您有其他問題,也歡迎關註我下方的公眾號,可以聯繫我一起交流切磋!