第3部分 ? ? 接 口 適 配
第8章 ? ?適 ?配 ?器
何為適配器模式
基本上有兩種實現(xiàn)適配器的方式。第一種是通過繼承來適配兩個接口检激,這稱為類適配器。類適配器是通過多重繼承實現(xiàn)的。
實現(xiàn)適配器模式的第二種方式稱為對象適配器胶台。與類適配器不同假褪,對象適配器不繼承被適配者署咽,而是組合了一個對它的引用。
適配器模式:將一個類的接口轉(zhuǎn)換成客戶希望的另為一個接口生音。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作宁否。
類適配器與對象適配器的對比:
類適配器:只針對單一的具體Adaptee,把Adaptee適配到Target ; 易于重載Adaptee的行為,因為是通過直接的子類化進(jìn)行的適配缀遍; 只有一個Adapter對象慕匠,無需額外的指針間接訪問Adaptee。
對象適配器:可以適配多個Adaptee及其子類域醇;難以重載Adaptee的行為台谊,需要借助于子類的對象而不是Adaptee本身蓉媳;需要額外的指針以間接訪問Adaptee并適配其行為。
何時使用適配器模式:
在以下情形青伤,自然會想到使用這一模式
- 已有類的接口與需求不匹配督怜;
- 想要一個可復(fù)用的類,該類能夠同可能帶有不兼容接口的其他類協(xié)作狠角;
- 需要適配一個類的幾個不同子類号杠,可是讓每一個子類去子類化一個類適配器又不實現(xiàn)。
第9章 ? ? 橋 ? 接
橋接模式: 將抽象部分與它的實現(xiàn)部分分離丰歌,使它們都可以獨立地變化姨蟋。
橋接模式的目的是把抽象層次結(jié)構(gòu)從其實實現(xiàn)中分離出來,使其能夠獨立變更立帖。抽象層定義了供客戶端使用的上層的抽象接口眼溶。實現(xiàn)層次結(jié)構(gòu)定義了供抽象層次使用的底層接口。實現(xiàn)類的引用被封裝于抽象層的實例中時晓勇,橋接就形成了堂飞。
何時使用橋接模式
- 不想在抽象與其實現(xiàn)之間形成固定的綁定關(guān)系(這樣就能在運(yùn)行時切換實現(xiàn))
- ?抽象及其實現(xiàn)都應(yīng)可以通過子類化獨立進(jìn)行擴(kuò)展;
- 對抽象的實現(xiàn)進(jìn)行修改不應(yīng)影響客戶端代碼绑咱;
- 如果每個實現(xiàn)需要額外的子類以細(xì)化抽象绰筛,則說明有必要把透明分成兩個部分;
- 想在帶有不同抽象接口的多個對象之間共享一個實現(xiàn)描融。
總結(jié): 本章討論了如何使用橋接模式來實現(xiàn)在iOS上運(yùn)行的仿真器應(yīng)用程序铝噩。沒有深入研究實現(xiàn)真正仿真器的額外細(xì)節(jié),只是重點探討了橋接模式能幫助我們解決的幾個設(shè)計問題窿克。橋接模式是把一個接口適配到不同接口的一種方式骏庸。下一章,將介紹另一種設(shè)計模式年叮,它不僅能夠?qū)⒉煌慕涌诮M合起來具被,而且可以把它們簡化成單一入口,就像建筑物的外觀(正門)一樣谋右。
第10章? ? 外? 觀
外觀模式為子系統(tǒng)中一組不同的接口提供統(tǒng)一的接口硬猫。外觀定義了一個高層接口,通過降低復(fù)雜度和隱藏子系統(tǒng)間的通信及依存關(guān)系改执,讓子系統(tǒng)更易于使用啸蜜。
何時使用外觀模式
- 子系統(tǒng)正逐漸變得復(fù)雜。應(yīng)用模式的過程中演化出許多類辈挂〕暮幔可以使用外觀為這些子系統(tǒng)類提供一個較簡單的接口。
- 可以使用外觀對子系統(tǒng)進(jìn)行分層终蒂。每個子系統(tǒng)級別有一個外觀作為入口點蜂林。讓他們通過其外觀進(jìn)行通信遥诉,可以簡化它們的依賴關(guān)系。
總結(jié): 當(dāng)程序逐漸變大變復(fù)雜時噪叙,會有越來越多小型的類從設(shè)計和應(yīng)用模式中演化出來矮锈。如果沒有一種簡化的方式來使用這些類,客戶端代碼最終將變得越來越大睁蕾、越來越難以理解苞笨,而且,維護(hù)起來會繁瑣無趣子眶。外觀有助于提供一種更為簡潔的方式來使用子系統(tǒng)中的這些類瀑凝。處理這些子系統(tǒng)類的默認(rèn)行為的,可能只是定義在外觀中的一個簡單的方法臭杰,而不必直接去使用這些類粤咪。
本書的這一部分介紹了幾個設(shè)計模式,它們主要針對用更簡單的接口或用不同的接口去適配各種接口渴杆。下一個部分中的設(shè)計模式用于分離協(xié)同工作的多個對象寥枝,這些對象具有共同或不同接口。