




已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
適配器模式 /橋接模式,結(jié)構(gòu)型模式 結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式簡介 適配器模式 模式動機與定義 模式結(jié)構(gòu)與分析 模式實例與解析 模式效果與應(yīng)用 模式擴展,橋接模式 模式動機與定義 模式結(jié)構(gòu)與分析 模式實例與解析 模式效果與應(yīng)用,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式概述 結(jié)構(gòu)型模式(Structural Pattern)描述如何將類或者對象結(jié)合在一起形成更大的結(jié)構(gòu),就像搭積木,可以通過簡單積木的組合形成復(fù)雜的、功能更為強大的結(jié)構(gòu)。,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式概述 根據(jù)這一點,結(jié)構(gòu)型模式可以分為類結(jié)構(gòu)型模式和對象結(jié)構(gòu)型模式: 類結(jié)構(gòu)型模式關(guān)心類的組合,由多個類可以組合成一個更大的系統(tǒng),在類結(jié)構(gòu)型模式中一般只存在繼承關(guān)系和實現(xiàn)關(guān)系。 對象結(jié)構(gòu)型模式關(guān)心類與對象的組合,通過關(guān)聯(lián)關(guān)系使得在一個類中定義另一個類的實例對象,然后通過該對象調(diào)用其方法。根據(jù)“合成復(fù)用原則”,在系統(tǒng)中盡量使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系,因此大部分結(jié)構(gòu)型模式都是對象結(jié)構(gòu)型模式。,結(jié)構(gòu)型模式,結(jié)構(gòu)型模式簡介 適配器模式(Adapter) 橋接模式(Bridge) 組合模式(Composite) 裝飾模式(Decorator) 外觀模式(Facade) 享元模式(Flyweight) 代理模式(Proxy),適配器模式,模式動機,適配器模式,模式動機 在軟件開發(fā)中采用類似于電源適配器的設(shè)計和編碼技巧被稱為適配器模式。 通常情況下,客戶端可以通過目標(biāo)類的接口訪問它所提供的服務(wù)。有時,現(xiàn)有的類可以滿足客戶類的功能需要,但是它所提供的接口不一定是客戶類所期望的,這可能是因為現(xiàn)有類中方法名與目標(biāo)類中定義的方法名不一致等原因所導(dǎo)致的。 在這種情況下,現(xiàn)有的接口需要轉(zhuǎn)化為客戶類期望的接口,這樣保證了對現(xiàn)有類的重用。如果不進行這樣的轉(zhuǎn)化,客戶類就不能利用現(xiàn)有類所提供的功能,適配器模式可以完成這樣的轉(zhuǎn)化。,適配器模式,模式動機 在適配器模式中可以定義一個包裝類,包裝不兼容接口的對象,這個包裝類指的就是適配器(Adapter),它所包裝的對象就是適配者(Adaptee),即被適配的類。 適配器提供客戶類需要的接口,適配器的實現(xiàn)就是把客戶類的請求轉(zhuǎn)化為對適配者的相應(yīng)接口的調(diào)用。也就是說:當(dāng)客戶類調(diào)用適配器的方法時,在適配器類的內(nèi)部將調(diào)用適配者類的方法,而這個過程對客戶類是透明的,客戶類并不直接訪問適配者類。因此,適配器可以使由于接口不兼容而不能交互的類可以一起工作。這就是適配器模式的模式動機。,適配器模式,模式定義 適配器模式(Adapter Pattern) :將一個接口轉(zhuǎn)換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器(Wrapper)。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對象結(jié)構(gòu)型模式。,適配器模式,模式結(jié)構(gòu) 類適配器,適配器模式,模式結(jié)構(gòu) 對象適配器,適配器模式,模式結(jié)構(gòu) 適配器模式包含如下角色: Target:目標(biāo)抽象類 Adapter:適配器類 Adaptee:適配者類 Client:客戶類,適配器模式,模式分析 典型的類適配器代碼:,適配器模式,模式分析 典型的對象適配器代碼:,適配器模式,適配器模式實例與解析 實例一:仿生機器人 現(xiàn)需要設(shè)計一個可以模擬各種動物行為的機器人,在機器人中定義了一系列方法,如機器人叫喊方法cry()、機器人移動方法move()等。如果希望在不修改已有代碼的基礎(chǔ)上使得機器人能夠像狗一樣叫,像狗一樣跑,使用適配器模式進行系統(tǒng)設(shè)計。,適配器模式,適配器模式實例與解析 實例一:仿生機器人,適配器模式,模式優(yōu)缺點 適配器模式的優(yōu)點如下: 將目標(biāo)類和適配者類解耦,通過引入一個適配器類來重用現(xiàn)有的適配者類,而無需修改原有代碼。 增加了類的透明性和復(fù)用性,將具體的實現(xiàn)封裝在適配者類中,對于客戶端類來說是透明的,而且提高了適配者的復(fù)用性。 靈活性和擴展性都非常好,通過使用配置文件,可以很方便地更換適配器,也可以在不修改原有代碼的基礎(chǔ)上增加新的適配器類,完全符合“開閉原則”。,適配器模式,模式優(yōu)缺點 類適配器模式還具有如下優(yōu)點: 由于適配器類是適配者類的子類,因此可以在適配器類中置換一些適配者的方法,使得適配器的靈活性更強。 類適配器模式的缺點如下: 對于Java、C#等不支持多重繼承的語言,一次最多只能適配一個適配者類,而且目標(biāo)抽象類只能為抽象類,不能為具體類,其使用有一定的局限性,不能將一個適配者類和它的子類都適配到目標(biāo)接口。,適配器模式,模式優(yōu)缺點 對象適配器模式還具有如下優(yōu)點: 一個對象適配器可以把多個不同的適配者適配到同一個目標(biāo),也就是說,同一個適配器可以把適配者類和它的子類都適配到目標(biāo)接口。 對象適配器模式的缺點如下: 與類適配器模式相比,要想置換適配者類的方法就不容易。如果一定要置換掉適配者類的一個或多個方法,就只好先做一個適配者類的子類,將適配者類的方法置換掉,然后再把適配者類的子類當(dāng)做真正的適配者進行適配,實現(xiàn)過程較為復(fù)雜。,適配器模式,模式使用 在以下情況下可以使用適配器模式: 系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的需要。 想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類,包括一些可能在將來引進的類一起工作。,適配器模式,模式應(yīng)用 (1) Sun公司在1996年公開了Java語言的數(shù)據(jù)庫連接工具JDBC,JDBC使得Java語言程序能夠與數(shù)據(jù)庫連接,并使用SQL語言來查詢和操作數(shù)據(jù)。JDBC給出一個客戶端通用的抽象接口,每一個具體數(shù)據(jù)庫引擎(如SQL Server、Oracle、MySQL等)的JDBC驅(qū)動軟件都是一個介于JDBC接口和數(shù)據(jù)庫引擎接口之間的適配器軟件。抽象的JDBC接口和各個數(shù)據(jù)庫引擎API之間都需要相應(yīng)的適配器軟件,這就是為各個不同數(shù)據(jù)庫引擎準(zhǔn)備的驅(qū)動程序。,適配器模式,模式應(yīng)用 (2)在Spring AOP框架中,對BeforeAdvice、AfterAdvice、ThrowsAdvice三種通知類型借助適配器模式來實現(xiàn)。,適配器模式,模式擴展 缺省適配器模式(Default Adapter Pattern) 當(dāng)不需要全部實現(xiàn)接口提供的方法時,可先設(shè)計一個抽象類實現(xiàn)接口,并為該接口中每個方法提供一個默認(rèn)實現(xiàn)(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現(xiàn)需求,它適用于一個接口不想使用其所有的方法的情況。因此也稱為單接口適配器模式。,適配器模式,模式擴展 雙向適配器 在對象適配器的使用過程中,如果在適配器中同時包含對目標(biāo)類和適配者類的引用,適配者可以通過它調(diào)用目標(biāo)類中的方法,目標(biāo)類也可以通過它調(diào)用適配者類中的方法,那么該適配器就是一個雙向適配器。,適配器模式,模式擴展 雙向適配器,適配器模式總結(jié),適配器模式用于將一個接口轉(zhuǎn)換成客戶希望的另一個接口,適配器模式使接口不兼容的那些類可以一起工作,其別名為包裝器。適配器模式既可以作為類結(jié)構(gòu)型模式,也可以作為對象結(jié)構(gòu)型模式。 適配器模式包含四個角色:目標(biāo)抽象類定義客戶要用的特定領(lǐng)域的接口;適配器類可以調(diào)用另一個接口,作為一個轉(zhuǎn)換器,對適配者和抽象目標(biāo)類進行適配,它是適配器模式的核心;適配者類是被適配的角色,它定義了一個已經(jīng)存在的接口,這個接口需要適配;在客戶類中針對目標(biāo)抽象類進行編程,調(diào)用在目標(biāo)抽象類中定義的業(yè)務(wù)方法。 在類適配器模式中,適配器類實現(xiàn)了目標(biāo)抽象類接口并繼承了適配者類,并在目標(biāo)抽象類的實現(xiàn)方法中調(diào)用所繼承的適配者類的方法;在對象適配器模式中,適配器類繼承了目標(biāo)抽象類并定義了一個適配者類的對象實例,在所繼承的目標(biāo)抽象類方法中調(diào)用適配者類的相應(yīng)業(yè)務(wù)方法。,適配器模式的主要優(yōu)點是將目標(biāo)類和適配者類解耦,增加了類的透明性和復(fù)用性,同時系統(tǒng)的靈活性和擴展性都非常好,更換適配器或者增加新的適配器都非常方便,符合“開閉原則”;類適配器模式的缺點是適配器類在很多編程語言中不能同時適配多個適配者類,對象適配器模式的缺點是很難置換適配者類的方法。 適配器模式適用情況包括:系統(tǒng)需要使用現(xiàn)有的類,而這些類的接口不符合系統(tǒng)的需要;想要建立一個可以重復(fù)使用的類,用于與一些彼此之間沒有太大關(guān)聯(lián)的一些類一起工作。,橋接模式,模式動機 將實現(xiàn)抽象部分與實現(xiàn)部分分離,使它們各自可以獨立地變化。,橋接模式,模式動機 設(shè)想要繪制一幅圖畫,藍天、白云、綠樹、小鳥,如果畫面尺寸很大,那么用蠟筆繪制就會遇到點麻煩。畢竟細(xì)細(xì)的蠟筆要涂出一片藍天,是有些麻煩。如果有可能,最好有套大號蠟筆,粗粗的蠟筆很快能涂抹完成。至于色彩嗎,最好每種顏色來支粗的,除了藍天還有綠地呢。這樣,如果一套12種顏色的蠟筆,我們需要兩套24支,同種顏色的一粗一細(xì)。這樣你就會想要是再有一套中號蠟筆就更好了,這樣,不多不少總共36支蠟筆。,橋接模式,橋接模式,橋接模式,模式結(jié)構(gòu),橋接模式,Abstraction:定義抽象類的接口,維護一個指向Implementor類型的指針。 Refined Abstraction:擴充Abstraction定義的接口,改變和修正父類對抽象化的定義。 Implementor:這個角色給出實現(xiàn)化角色的接口,但不給出具體的實現(xiàn)。必須指出的是,這個接口不一定和抽象化角色的接口定義相同,實際上,這兩個接口可以非常不一樣。實現(xiàn)化角色應(yīng)當(dāng)只給出底層操作,而抽象化角色應(yīng)當(dāng)只給出基于底層操作的更高一層的操作。 Concrete Implementor:這個角色給出實現(xiàn)化角色接口的具體實現(xiàn)。,橋接模式,模式分析 abstract class Abstraction private Implementor imp; /抽象部分包含的實現(xiàn)者 public Implementor Imp set imp = value; get return imp; public abstract void Operation(); ,橋接模式,模式分析 派生抽象化角色 class RefinedAbstraction : Abstraction public override void Operation() Imp.OperationImp(); /調(diào)用實現(xiàn)者的方法實現(xiàn)操作 ,橋接模式,模式分析 實現(xiàn)者角色 abstract class Implementor public abstract void OperationImp(); ,橋接模式,模式分析 具體實現(xiàn)者角色A class ConcreteImplementorA : Implementor public override void OperationImp() Console.WriteLine(“ConcreteImplementAs Operator !“); ,橋接模式,模式分析 具體實現(xiàn)者角色B class ConcreteImplementorB : Implementor public override void OperationImp() Console.WriteLine(“ConcreteImplementBs Operator !“); ,橋接模式,模式實用性 如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的聯(lián)系。 設(shè)計要求實現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者說實現(xiàn)化角色的改變對客戶端是完全透明的。 一個構(gòu)件有多于一個的抽象化角色和實現(xiàn)化角色,系統(tǒng)需要它們之間進行動態(tài)耦合。 雖然在系統(tǒng)中使用繼承是沒有問題的,但是由于抽象化角色和具體化角色需要獨立變化,設(shè)計要求需要獨立管理這兩者。,橋接模式,模式應(yīng)用 開關(guān)與臺燈:任何臺燈都包括燈泡和燈架兩部分,不同的燈泡可以與不同的臺燈(燈架)匹配,可以只更換燈泡或只更換臺燈(燈架),燈泡與臺燈(燈架)之間存在一種交錯的巨烈變化,所以把燈和臺燈“做死”在一起不是一種好的作法??梢允褂脴蚪悠髂J绞怪怦睿涸谂_燈(燈架)上做一個燈口,可以用它來調(diào)用燈泡的“發(fā)光”的方法點亮燈泡,同時我們可以隨意地更換我們喜歡的燈泡,而不用去換整個臺燈(燈架)。,橋接模式,為了實現(xiàn)燈架與燈泡之間的解耦,我們使用橋接器模式,抽象出一個“抽象化臺燈”,它有一個開關(guān)一個燈泡,可以通過開關(guān)調(diào)用燈泡的發(fā)光方法來實現(xiàn)發(fā)光。同時我們也為燈泡做了一個抽象,以使此燈的燈泡可以恰好安裝在燈架的燈口上。 下面為抽象出來的燈架和燈泡派生兩個燈泡和兩個燈架: 兩個臺燈的燈架:一個是旋鈕式開關(guān),另一個是按鈕式開關(guān)。 兩個燈泡:紅色燈泡和藍色燈泡。,橋接模式,抽象臺燈 abstract class Lamp protected Light light; /臺燈上的燈泡 public Light Light set light = value; public abstract void OpenLight(); /臺燈的開關(guān) ,橋接模式,旋鈕臺燈 class CircleLamp: Lamp private int v=0; /旋鈕臺燈打開后,燈泡的最初電壓 public override void OpenLight() /旋轉(zhuǎn)臺燈開關(guān)調(diào)亮燈泡 for (v = 0; v = 5; v+) light.Level = v; /根據(jù)電壓設(shè)定燈泡發(fā)光強度 light.Shine(); /燈泡發(fā)光 ,橋接模式,按鈕臺燈 class SwitchLamp : Lamp private int v = 5; /打開臺燈開關(guān)后,燈泡的最初電壓 public override void OpenLight() /打開按鈕臺燈的開關(guān) light.Level = v; /根據(jù)電壓設(shè)定燈泡發(fā)光強度 light.Shine();/燈泡發(fā)光 ,橋接模式,燈泡抽象體 abstract class Light protected int level; /燈泡的發(fā)光強度 public int Level set level = value; public abstract void Shine(); /燈泡的發(fā)光方法 ,橋接模式,紅燈 class RedLight:Ligh
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- NB/T 11643-2024煤炭快速定量裝車系統(tǒng)通用技術(shù)標(biāo)準(zhǔn)
- 豪宅項目轉(zhuǎn)讓協(xié)議書范本
- 貨運司機兼職合同協(xié)議
- 貸款采購供銷合同協(xié)議
- 貨場鋼材回收合同協(xié)議
- 走賬免責(zé)協(xié)議書模板
- 設(shè)備共享協(xié)議書范本
- 貨運公路運輸合同協(xié)議
- 解除就業(yè)協(xié)議書模板
- 2025年礦山安全與環(huán)境保護專業(yè)考試題及答案
- 北京2025年中國環(huán)境監(jiān)測總站招聘(第二批)筆試歷年參考題庫附帶答案詳解
- “皖南八?!?024-2025學(xué)年高一第二學(xué)期期中考試-英語(譯林版)及答案
- 安寧療護人文關(guān)懷護理課件
- 黑龍江省齊齊哈爾市龍江縣部分學(xué)校聯(lián)考2023-2024學(xué)年八年級下學(xué)期期中考試物理試題【含答案、解析】
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- “記憶中的人、事兒”為副標(biāo)題(四川眉山原題+解題+范文+副標(biāo)題作文“追求”主題)-2025年中考語文一輪復(fù)習(xí)之寫作
- 2024年企業(yè)員工研發(fā)補貼協(xié)議范本模板3篇
- 全國賽課一等獎初中統(tǒng)編版七年級道德與法治上冊《樹立正確的人生目標(biāo)》教學(xué)設(shè)計
- 《思想政治教育方法論》考研(第3版)鄭永廷配套考試題庫及答案【含名校真題、典型題】
- 初中數(shù)學(xué)新課程標(biāo)準(zhǔn)(2024年版)
評論
0/150
提交評論