版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第10章,適配器模式,劉 偉 weiliu_,本章教學(xué)內(nèi)容,結(jié)構(gòu)型模式 結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式簡(jiǎn)介 適配器模式 模式動(dòng)機(jī)與定義 模式結(jié)構(gòu)與分析 模式實(shí)例與解析 模式效果與應(yīng)用 模式擴(kuò)展,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式(Structural Pattern)描述如何將類或者對(duì)象結(jié)合在一起形成更大的結(jié)構(gòu),就像搭積木,可以通過(guò)簡(jiǎn)單積木的組合形成復(fù)雜的、功能更為強(qiáng)大的結(jié)構(gòu)。,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式可以分為類結(jié)構(gòu)型模式和對(duì)象結(jié)構(gòu)型模式: 類結(jié)構(gòu)型模式關(guān)心類的組合,由多個(gè)類可以組合成一個(gè)更大的系統(tǒng),在類結(jié)構(gòu)型模式中一般只存在繼承關(guān)系和實(shí)現(xiàn)關(guān)系。 對(duì)象結(jié)構(gòu)型模式關(guān)心類與對(duì)象的組合
2、,通過(guò)關(guān)聯(lián)關(guān)系使得在一個(gè)類中定義另一個(gè)類的實(shí)例對(duì)象,然后通過(guò)該對(duì)象調(diào)用其方法。根據(jù)“合成復(fù)用原則”,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來(lái)替代繼承關(guān)系,因此大部分結(jié)構(gòu)型模式都是對(duì)象結(jié)構(gòu)型模式。,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式簡(jiǎn)介 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy),適配器模式,模式動(dòng)機(jī),適配器模式,模式動(dòng)機(jī) 在軟件開(kāi)發(fā)中采用類似于電源適配器的設(shè)計(jì)和編碼技巧被稱為適配器模式。 通常情況下,客戶端可以通過(guò)目標(biāo)類的接口訪問(wèn)它所提供的服務(wù)。有時(shí),現(xiàn)有的類可以
3、滿足客戶類的功能需要,但是它所提供的接口不一定是客戶類所期望的,這可能是因?yàn)楝F(xiàn)有類中方法名與目標(biāo)類中定義的方法名不一致等原因所導(dǎo)致的。 在這種情況下,現(xiàn)有的接口需要轉(zhuǎn)化為客戶類期望的接口,這樣保證了對(duì)現(xiàn)有類的重用。如果不進(jìn)行這樣的轉(zhuǎn)化,客戶類就不能利用現(xiàn)有類所提供的功能,適配器模式可以完成這樣的轉(zhuǎn)化。,適配器模式,模式動(dòng)機(jī) 在適配器模式中可以定義一個(gè)包裝類,包裝不兼容接口的對(duì)象,這個(gè)包裝類指的就是適配器(Adapter),它所包裝的對(duì)象就是適配者(Adaptee),即被適配的類。 適配器提供客戶類需要的接口,適配器的實(shí)現(xiàn)就是把客戶類的請(qǐng)求轉(zhuǎn)化為對(duì)適配者的相應(yīng)接口的調(diào)用。也就是說(shuō):當(dāng)客戶類調(diào)用適
4、配器的方法時(shí),在適配器類的內(nèi)部將調(diào)用適配者類的方法,而這個(gè)過(guò)程對(duì)客戶類是透明的,客戶類并不直接訪問(wèn)適配者類。因此,適配器可以使由于接口不兼容而不能交互的類可以一起工作。這就是適配器模式的模式動(dòng)機(jī)。,適配器模式,模式定義 適配器模式(Adapter Pattern) :將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對(duì)象結(jié)構(gòu)型模式。,適配器模式,模式定義 Adapter Pattern: Convert the interface of a class into another int
5、erface clients expect. Adapter lets classes work together that couldnt otherwise because of incompatible interfaces. Frequency of use: medium high,適配器模式,模式結(jié)構(gòu) 類適配器,適配器模式,模式結(jié)構(gòu) 對(duì)象適配器,適配器模式,模式結(jié)構(gòu) 適配器模式包含如下角色: Target:目標(biāo)抽象類 Adapter:適配器類 Adaptee:適配者類 Client:客戶類,適配器模式,模式分析 典型的類適配器代碼:,適配器模式,模式分析 典型的對(duì)象適配器代碼:,適
6、配器模式,適配器模式實(shí)例與解析 實(shí)例一:仿生機(jī)器人 現(xiàn)需要設(shè)計(jì)一個(gè)可以模擬各種動(dòng)物行為的機(jī)器人,在機(jī)器人中定義了一系列方法,如機(jī)器人叫喊方法cry()、機(jī)器人移動(dòng)方法move()等。如果希望在不修改已有代碼的基礎(chǔ)上使得機(jī)器人能夠像狗一樣叫,像狗一樣跑,使用適配器模式進(jìn)行系統(tǒng)設(shè)計(jì)。,適配器模式,適配器模式實(shí)例與解析 實(shí)例一:仿生機(jī)器人,適配器模式,適配器模式實(shí)例與解析 實(shí)例一:仿生機(jī)器人 參考代碼 (Chapter 10 Adaptersample01),演示,適配器模式,適配器模式實(shí)例與解析 實(shí)例二:加密適配器 某系統(tǒng)需要提供一個(gè)加密模塊,將用戶信息(如密碼等機(jī)密信息)加密之后再存儲(chǔ)在數(shù)據(jù)庫(kù)中
7、,系統(tǒng)已經(jīng)定義好了數(shù)據(jù)庫(kù)操作類。為了提高開(kāi)發(fā)效率,現(xiàn)需要重用已有的加密算法,這些算法封裝在一些由第三方提供的類中,有些甚至沒(méi)有源代碼。使用適配器模式設(shè)計(jì)該加密模塊,實(shí)現(xiàn)在不修改現(xiàn)有類的基礎(chǔ)上重用第三方加密方法。,適配器模式,適配器模式實(shí)例與解析 實(shí)例二:加密適配器,適配器模式,適配器模式實(shí)例與解析 實(shí)例二:加密適配器 參考代碼 (Chapter 10 Adaptersample02),演示,適配器模式,模式優(yōu)缺點(diǎn) 適配器模式的優(yōu)點(diǎn) 將目標(biāo)類和適配者類解耦,通過(guò)引入一個(gè)適配器類來(lái)重用現(xiàn)有的適配者類,而無(wú)須修改原有代碼。 增加了類的透明性和復(fù)用性,將具體的實(shí)現(xiàn)封裝在適配者類中,對(duì)于客戶端類來(lái)說(shuō)是透
8、明的,而且提高了適配者的復(fù)用性。 靈活性和擴(kuò)展性都非常好,通過(guò)使用配置文件,可以很方便地更換適配器,也可以在不修改原有代碼的基礎(chǔ)上增加新的適配器類,完全符合“開(kāi)閉原則”。,適配器模式,模式優(yōu)缺點(diǎn) 類適配器模式還具有如下優(yōu)點(diǎn): 由于適配器類是適配者類的子類,因此可以在適配器類中置換一些適配者的方法,使得適配器的靈活性更強(qiáng)。 類適配器模式的缺點(diǎn)如下: 對(duì)于Java、C#等不支持多重繼承的語(yǔ)言,一次最多只能適配一個(gè)適配者類,而且目標(biāo)抽象類只能為抽象類,不能為具體類,其使用有一定的局限性,不能將一個(gè)適配者類和它的子類都適配到目標(biāo)接口。,適配器模式,模式優(yōu)缺點(diǎn) 對(duì)象適配器模式還具有如下優(yōu)點(diǎn): 一個(gè)對(duì)象適
9、配器可以把多個(gè)不同的適配者適配到同一個(gè)目標(biāo),也就是說(shuō),同一個(gè)適配器可以把適配者類和它的子類都適配到目標(biāo)接口。 對(duì)象適配器模式的缺點(diǎn)如下: 與類適配器模式相比,要想置換適配者類的方法就不容易。如果一定要置換掉適配者類的一個(gè)或多個(gè)方法,就只好先做一個(gè)適配者類的子類,將適配者類的方法置換掉,然后再把適配者類的子類當(dāng)做真正的適配者進(jìn)行適配,實(shí)現(xiàn)過(guò)程較為復(fù)雜。,適配器模式,模式適用環(huán)境 在以下情況下可以使用適配器模式: 系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的需要。 想要建立一個(gè)可以重復(fù)使用的類,用于與一些彼此之間沒(méi)有太大關(guān)聯(lián)的一些類,包括一些可能在將來(lái)引進(jìn)的類一起工作。,適配器模式,模式應(yīng)用
10、(1) Sun公司在1996年公開(kāi)了Java語(yǔ)言的數(shù)據(jù)庫(kù)連接工具JDBC,JDBC使得Java語(yǔ)言程序能夠與數(shù)據(jù)庫(kù)連接,并使用SQL語(yǔ)言來(lái)查詢和操作數(shù)據(jù)。JDBC給出一個(gè)客戶端通用的抽象接口,每一個(gè)具體數(shù)據(jù)庫(kù)引擎(如SQL Server、Oracle、MySQL等)的JDBC驅(qū)動(dòng)軟件都是一個(gè)介于JDBC接口和數(shù)據(jù)庫(kù)引擎接口之間的適配器軟件。抽象的JDBC接口和各個(gè)數(shù)據(jù)庫(kù)引擎API之間都需要相應(yīng)的適配器軟件,這就是為各個(gè)不同數(shù)據(jù)庫(kù)引擎準(zhǔn)備的驅(qū)動(dòng)程序。,適配器模式,模式應(yīng)用 (2)在Spring AOP框架中,對(duì)BeforeAdvice、AfterAdvice、ThrowsAdvice三種通知類型
11、借助適配器模式來(lái)實(shí)現(xiàn)。,適配器模式,模式應(yīng)用 (3)在JDK類庫(kù)中也定義了一系列適配器類,如在mon包中定義的InputStreamAdapter類,用于包裝ImageInputStream接口及其子類對(duì)象。,適配器模式,模式擴(kuò)展 默認(rèn)適配器模式(Default Adapter Pattern)或缺省適配器模式 當(dāng)不需要全部實(shí)現(xiàn)接口提供的方法時(shí),可先設(shè)計(jì)一個(gè)抽象類實(shí)現(xiàn)接口,并為該接口中每個(gè)方法提供一個(gè)默認(rèn)實(shí)現(xiàn)(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來(lái)實(shí)現(xiàn)需求,它適用于一個(gè)接口不想使用其所有的方法的情況。因此也稱為單接口適配器模式。,適配器模式,模式擴(kuò)展 默認(rèn)適配器模式 適配者
12、接口 默認(rèn)適配器類 具體業(yè)務(wù)類,適配器模式,模式擴(kuò)展 默認(rèn)適配器模式,適配器模式,模式擴(kuò)展 雙向適配器 在對(duì)象適配器的使用過(guò)程中,如果在適配器中同時(shí)包含對(duì)目標(biāo)類和適配者類的引用,適配者可以通過(guò)它調(diào)用目標(biāo)類中的方法,目標(biāo)類也可以通過(guò)它調(diào)用適配者類中的方法,那么該適配器就是一個(gè)雙向適配器。,適配器模式,模式擴(kuò)展 雙向適配器,本章小結(jié),結(jié)構(gòu)型模式描述如何將類或者對(duì)象結(jié)合在一起形成更大的結(jié)構(gòu)。 適配器模式用于將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對(duì)象結(jié)構(gòu)型模式。 適配器模式包含四個(gè)角色:目標(biāo)抽象類定義客戶要用的特定領(lǐng)域的接口;適配器類可以調(diào)用另一個(gè)接口,作為一個(gè)轉(zhuǎn)換器,對(duì)適配者和抽象目標(biāo)類進(jìn)行適配,它是適配器模式的核心;適配者類是被適配的角色,它定義了一個(gè)已經(jīng)存在的接口,這個(gè)接口需要適配;在客戶類中針對(duì)目標(biāo)抽象類進(jìn)行編程,調(diào)用在目標(biāo)抽象類中定義的業(yè)務(wù)方法。 在類適配器模式中,適配器類實(shí)現(xiàn)了目標(biāo)抽象類接口并繼承了適配者類,并在目標(biāo)抽象類的實(shí)現(xiàn)方法中調(diào)用所繼承的適配者類的方法;在對(duì)象適配器模式中,適配器類繼承了目標(biāo)抽象類并定義了一個(gè)適配者類的對(duì)象實(shí)例,在所繼承的目標(biāo)抽象類方法中調(diào)用適配者類的相應(yīng)業(yè)務(wù)方法。,本章小結(jié),適配器模式的主要優(yōu)點(diǎn)是將目標(biāo)類和適配者類解耦,增加了類的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四商場(chǎng)休閑娛樂(lè)項(xiàng)目承包合作協(xié)議3篇
- 2024聯(lián)營(yíng)合同協(xié)議書
- 上海地區(qū)標(biāo)準(zhǔn)化住宅租賃協(xié)議范本版
- 二零二五年度智能住宅購(gòu)置首付款協(xié)議書4篇
- 菁版2025年度離婚協(xié)議書模板制作與隱私保護(hù)合同3篇
- 2025年度人工智能領(lǐng)域創(chuàng)業(yè)合伙人股權(quán)分配與激勵(lì)協(xié)議3篇
- 2024年股權(quán)投資最高額抵押借款協(xié)議3篇
- 2024退學(xué)協(xié)議書內(nèi)容:涉及特殊教育機(jī)構(gòu)學(xué)員退學(xué)及康復(fù)訓(xùn)練服務(wù)合同3篇
- 2024試用期員工績(jī)效管理與考核協(xié)議范本3篇
- 2025年度智能城市基礎(chǔ)設(shè)施建設(shè)與運(yùn)營(yíng)管理合同4篇
- 滬教版數(shù)學(xué)六年級(jí)(上)第二章分?jǐn)?shù)課課練和單元練習(xí)卷及參考答案
- 承包意向書2024年
- 小學(xué)心理健康教師資格考試面試2024年下半年試題與參考答案
- (正式版)QC∕T 1206.2-2024 電動(dòng)汽車動(dòng)力蓄電池?zé)峁芾硐到y(tǒng) 第2部分:液冷系統(tǒng)
- (正式版)CB∕T 4550-2024 船舶行業(yè)企業(yè)安全設(shè)備設(shè)施管理規(guī)定
- 完整版肺癌護(hù)理查房課件
- 正規(guī)光伏屋頂租賃合同
- 敘事護(hù)理活動(dòng)方案設(shè)計(jì)
- 小小科學(xué)家《物理》模擬試卷A(附答案)
- 醫(yī)療器械經(jīng)銷商會(huì)議
- 完整版-九年級(jí)科學(xué)科學(xué)公式
評(píng)論
0/150
提交評(píng)論