介面卡在我們的生活中應用的十分廣泛,比如我們的筆記本電源,如果不用介面卡,那我們的筆記本將直接接入220v的交流電,出國的朋友肯定對三個插孔的轉換頭比較熟悉,這也是一種介面卡。顧名思義,介面卡模式(有時候也稱包裝樣式或者包裝)將乙個類的介面適配成使用者所期待的。乙個適配允許通常因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在乙個已存在的類中,感覺又和**模式有點像了,接著,我們就來學習一下介面卡模式,包括以下三種角色:
source:需要被適配的類、介面、物件,即datas。
destination:需要得到的類,source通過適配得到的類物件,也就是我們期待得到的藉口。
adapter:介面卡類,協調source和destination,使兩者能夠協同工作。
常用的介面卡模式包括三種:類介面卡、物件介面卡以及介面介面卡。
/**
* @author jhz
* @date 18-9-2 下午8:45
*/public class voltage220
}
/**
* @author jhz
* @date 18-9-2 下午8:47
*/public inte***ce voltage5
這裡設計成介面,也許根本就沒有5v的電源或並不通用。
/**
* @author jhz
* @date 18-9-2 下午8:48
*/public class adapter extends voltage220 implements voltage5
}
/**
* @author jhz
* @date 18-9-2 下午8:51
小結:從adapter類中可看到,adapter需要繼承voltage220類,因此voltage5類必須是介面,以便於adapter去繼承voltage220並實現voltage5,完成適配的功能,但這樣就導致了adapter裡暴露了voltage220類的方法,使用起來的成本就增加了。
/**
* @author jhz
* @date 18-9-2 下午9:10
小結:使用組合**繼承,更為靈活,成本也更小,voltage5類可以不再強制要求為介面(不為介面時adapter2繼承voltage5),和裝飾器模式的區別在於,裝飾器是對原有資源的裝飾(voltage220),裝飾的過程對使用者遮蔽,而介面卡(adapter2)的修改,使用者是需要知情的,因為用法也會改變,從使用者(laptop)的用法即可看出:
public static void main(string args)
}
/**
* @author jhz
* @date 18-9-2 下午9:31
*/public inte***ce dcoutput
萬能介面卡是乙個定義了各種電壓輸出的介面。
/**
* @author jhz
* @date 18-9-2 下午9:34
*/public class adapter3 implements dcoutput
@override
public int output5v()
@override
public int output9v()
@override
public int output12v()
@override
public int output24v()
}
中間介面卡用於實現萬能介面卡介面,並不是真正接入到laptop上的介面卡。
/**
* @author jhz
* @date 18-9-2 下午9:32
*/public class adapterto5v extends adapter3
@override
public int output5v()
return outputvoltage;}}
此時,筆記本不要求5v電壓的電源,而是要求5v電壓的介面卡:
/**
* @author jhz
* @date 18-9-2 下午8:51
設計模式學習 介面卡模式
建立型模式學習完了,接下來學習的是結構性模式。結構型模式主要涉及到如何組合類和物件以獲得更大的結構,通常採用繼承機制來組合介面和實現。首先學習的是介面卡模式。首先是介面卡的定義 介面卡模式,將乙個類的介面轉換成客戶所希望的另外乙個介面。介面卡模式使得原來由於介面不相容而不能一起工作的類可以一起工作。...
介面卡模式 設計模式學習
介面卡模式 adapter 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。在軟體開發中,系統的資料行為都正確,但介面不符,我們應該考慮用介面卡,目的是使控制範圍之外的乙個原有物件與某個介面匹配。介面卡模式主要應用於希望復用一些...
設計模式 介面卡模式 類介面卡 物件介面卡
乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...