介面卡模式是一種極為常見的設計模式,特別是在android世界中,像listview
的adapter
就是典型的介面卡模式應用場景。介面卡模式解決的是兩個不相容的介面或者物件之間的相容性問題,他提供一種混合介面卡和目標物件之間的介面或者方法的混血物件。
把乙個類的介面變換成客戶端所期待的另一種介面,從而使原先因為介面不匹配而無法一起工作的兩個類可以一起工作。
系統需要使用乙個類,但是該類介面無法在系統中被直接使用
想建立乙個通用的可以在多個類之間協調問題的類
在輸入不固定的時候,想統一輸出
目標物件target需要的介面或者方法
適配物件需要適配的物件,提供的介面無法被目標物件直接使用
介面卡轉換物件,用來將適配物件的方法或者介面轉換成目標物件能夠識別的格式
/**
* 目標介面
*/public
inte***ce
icharge
/** * 介面卡類
*/public
class
}
這是一種典型的類介面卡模式。我們可以通過實現繼承的方式來完成介面卡的建立
public
class
chargeadapter
extends
implements
icharge
@override
public
double
get5voltage()
}
這樣,蘋果充電器就可以滿足目標充電器的需求,來輸出6v的電壓了。
物件介面卡是區別於類適配的一種方式,它不是通過實現繼承的方式來完成適配工作,而是通過**的方式來完成的。在介面卡內部會持有乙個適配物件的引用,通過建立與適配物件一模一樣的api來完成適配工作。還是以上文中的充電器場景舉例來看看如何實現物件介面卡
public
class
objectadapter
implements
icharge
public
double
get5voltage()
@override
public
double
get6voltage()
}
可以看到,介面卡會持有乙個適配類的物件,構成一種靜態**模型,從而完成適配工作。
開篇說過,在安卓世界中,介面卡模式使用異常廣泛,其中最典型的就是列表控制項中的介面卡。在這種環境下,介面卡提供的功能已經不侷限於粘合劑的角色。它更是提供了一種將資料和ui進行適配的功能,將控制項ui的渲染和資料集進行分離,然後利用介面卡來進行檢視資料的繫結,讓控制項可以擁抱更多的變化,提高了控制項的靈活性和擴充套件性。下文是adapter
介面的檔案說明,表明了adapter
的介面卡角色特性。
/**
* an adapter object acts as a bridge between an and the
* underlying data for that view. the adapter provides access to the data items.
* the adapter is also responsible for ****** a for
* each item in the data set.
*/public
inte***ce
adapter
介面卡模式是一種非常常見以及實用的設計模式。他為類提供了更好的復用性,在極小的修改下就可以將優秀的類引入到當前系統中,哪怕兩者介面無法相容;與此同時,介面卡內部可以隨時呼叫自己的功能,提高了整個系統的可擴充套件性。當然,過多的介面卡會降低**的可讀性,提高維護難度。 介面卡模式的理解
介面卡模式用於 系統的資料和行為都正確,但介面不符時,應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況,比如在需要對早期 復用一些功能等應用上很有實際價值。自己翻譯就是 已經有了乙個早期的抽象的介面或者...
python理解介面卡模式
介面卡模式 由於系統呼叫方式的原因,需要把不同類裡面的方法 名字不一樣 用同樣的方式來呼叫 coding utf 8 class bird def fly self print bird is flying class dog defbark self print dog is barking cl...
介面卡模式(類介面卡 物件介面卡)
做個筆記 引用 public inte ce usb public inte ce psp public class usber implements usb 類介面卡 psp適用usb介面 public class usbadapter extends usber implements psp 物...