適配器模式:將復用類的接口轉(zhuǎn)換成客戶端希望的接口佑附。(本質(zhì)上就是復用的類的接口不能滿足當前項目的需要樊诺,Adapter 模式使得原本由于接口不兼容而不能一起工作的復用類與現(xiàn)有項目兼容)
適用場景:1.已經(jīng)存在的類的接口不符合我們的需求;
2.創(chuàng)建一個可以復用的類音同,使得該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協(xié)同工作词爬;
3.在不對每一個都進行子類化以匹配它們的接口的情況下,使用一些已經(jīng)存在的子類权均。
適配器模式分為類適配器和對象適配器兩種實現(xiàn)方式顿膨。
1.類適配器
要在OC中實現(xiàn)類適配器锅锨,首先需要有定義了客戶端要使用的一套行為的協(xié)議,然后要用具體的適配器類來實現(xiàn)這個協(xié)議恋沃。適配器類同時也要繼承被適配者必搞。類適配器結構圖如下所示:從圖中可以看到,Adapter是一個Target類型囊咏,同時也是Adaptee類型恕洲。它重載了Target的request方法,沒有重載Adaptee中的specificRequest方法梅割,而是在Adapter的request方法的實現(xiàn)中霜第,調(diào)用父類的specificRequest方法。只有當Target是協(xié)議而不是類時户辞,類適配器才能夠用OC來實現(xiàn)泌类,因為OC中是沒有多重繼承的。
2.對象適配器
與類適配器不同咆课,對象適配器不繼承被適配者末誓,而是組合了一個對它的引用。對象適配器結構圖如下所示:從兩個結構圖可以看到书蚪,Target和Adapter的關系相同喇澡,Adapter和Adaptee之間的關系,由繼承變成了關聯(lián)殊校。這種關系下晴玖,Adapter需要保持一個對Adaptee的引用。在request方法中为流,Adapter發(fā)送[_adaptee specificRequest]消息給Adaptee呕屎,以完成客戶端的請求。
小結
適配器模式主要應用于“希望復用一些現(xiàn)存的類敬察,但是接口又與復用環(huán)境要求不一致的情況”秀睛,在遺留代碼復用、類庫遷移等方面非常有用莲祸。
適配器模式有對象適配器和類適配器兩種形式的實現(xiàn)結構蹂安,但是類適配器采用“多繼承”的實現(xiàn)方式,帶來了不良的高耦合锐帜,所以一般不推薦使用田盈,另外,OC中也不支持多重繼承缴阎。對象適配器采用“對象組合”的方式允瞧,更符合松耦合規(guī)范。
在以下各種情況下可以考慮使用適配器模式:
需要使用一個已經(jīng)存在的類,而它的接口不符合新環(huán)境的規(guī)范述暂。
想創(chuàng)建一個可以復用的類痹升,該類可以與其他不相關的類或不可預見的類(即那些接口可能不一定兼容的類)協(xié)同工作。
代碼