介面卡模式(adapter pattern)是作為兩個不相容的介面之間的橋梁。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。
這種模式涉及到乙個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆記本之間的介面卡。您將記憶體卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取記憶體卡。
接下來要說個例子來演示介面卡模式的使用。其中我們一直在使用sqlserver進行增刪查改的操作,突然某一天,感覺效能不行了,想替換成redis這種nosql的增刪查改的方式,但是redis的幫助類的並沒有和sqlserver查詢類的介面命名一致,直接替換成本大,這時就需要乙個中間層來適配,使得原來sqlserver的資料庫操作無縫對接redis資料庫操作。
下面讓我們看看介面卡的定義,介面卡模式——把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式有類的介面卡模式和物件的介面卡模式兩種形式,下面我們先來描述一下類介面卡模式。
1. 在說介面卡前,先展示一下sqlserver幫助類的實現。首先,先定義統一的增刪查改幫助類介面。
/// /// sql幫助抽象類///
public inte***ce ihelper
2.接著就是sqlserver幫助類實現ihelper介面.
public class sqlserverhelper : ihelper被構造");
}public void add()
的add正在新增資料");
}public void delete()
的delete正在刪除資料");
}public void query()
的query正在查詢資料");
}public void update()
的update正在更新資料");
}}
3.sqlserver一直用得好好的,現在業務公升級了,資料庫撐不住了,關係型資料庫效能堪憂,redis這種nosql很好,但是有個問題redis有自定義的幫助類,如果需要公升級使用redis,不能直接替換sqlserver的幫助類的介面方法;因為redishelper沒有實現ihelper介面;遇到乙個想要放一起使用但是卻不能一起使用的問題。這時我們的介面卡就要登場了,先演示一下類介面卡。
/// /// redis幫助類,由於執行方法與sql的執行方法不一致,需要適配///
public class redishelper
被構造");
}public void redisadd()
的redisadd正在新增資料");
}public void redisdelete()
的redisdelete正在刪除資料");
}public void redisquery()
的redisquery正在查詢資料");
}public void redisupdate()
的redisupdate正在更新資料");
}}
/// /// 類介面卡///
public class redisclasshelper : redishelper, ihelper
public void delete()
public void query()
public void update()
}
class program}
4. 以上就是類介面卡的實現,但是大家都發現了乙個問題,就是雖然解決redishelper和ihelper不相容的問題,但是因為是強繼承,具有侵入性redisclasshelper只能為redishelper服務,而且想要匹配一 個類以及所有它的子類時,類的介面卡模式就不能勝任了;為了解決這個問題,多了一種物件介面卡,使得適配類可以相容多個不同的物件。
為了證明這一點,我寫乙個繼承了redishelper類的子類
public class redischildhelper: redishelper
然後我寫個物件介面卡
/// /// 物件介面卡///
public class redisobjhelper : ihelper
public void setredishelper(redishelper redishelper)
public void add()
public void delete()
public void query()
public void update()
}
5.演示一下物件介面卡的實現
class program}
1.優點:
可以在不修改原有**的基礎上來復用現有類,很好地符合 「開閉原則」
可以重新定義(被適配的類)的部分行為.
僅僅引入乙個物件,並不需要額外的字段來引用redishelper例項(這個即是優點也是缺點)
2.缺點:
採用了 「多繼承」的實現方式,帶來了不良的高耦合。
1.優點:可以在不修改原有**的基礎上來復用現有類,很好地符合 「開閉原則」,採用 「物件組合」的方式,更符合松耦合,以相容多個不同的物件
設計模式(6) 介面卡模式
將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式讓那些介面不相容的類可以一起工作。物件介面卡 一繼承一組合 類介面卡 多繼承 不推薦使用 在軟體構建過程中,由於應用環境的變化,常常需要把一些現存的物件放在新的環境中使用,但是新的環境要求的介面是現存物件所滿足不了的。抽象目標類 target 新的...
java設計模式6 介面卡模式
介面卡 就是講以有的類通過介面卡轉化為我們需要的型別。介面卡起到了中間作用 如圖所示,介面卡的作用就像是充電器一樣 手機充電需要的是5v電壓,但是家裡插座出來的電壓220v 手機介面卡就是將其轉換為5v的過程 public class mobile 提供5v電壓的乙個介面 author zhy pu...
6 設計模式之介面卡模式
將一類介面轉換成另乙個類介面,使得原本具有相關性但不相容的兩個介面,可以可以在一起工作。生活中常見的介面卡就是手機充電器了 家裡的220v電源插座可以視作乙個介面,同時usb資料線也可視作乙個介面,這兩個介面具有相關性,但他們不相容,因為usb資料線需要乙個5v的輸入,但插座是220v的,因此我們就...