設(shè)計模式-適配器模式和迭代器模式_第1頁
設(shè)計模式-適配器模式和迭代器模式_第2頁
設(shè)計模式-適配器模式和迭代器模式_第3頁
設(shè)計模式-適配器模式和迭代器模式_第4頁
設(shè)計模式-適配器模式和迭代器模式_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、目 錄 1. 適配器模式2. 迭代器模式適配器模式假設(shè)有一個軟件系統(tǒng),希望它能和一個新的廠商類庫搭配使用,但是這個新廠商所設(shè)計出來的接口,不同于舊廠商的接口1、情景描述現(xiàn)有系統(tǒng)廠商類適配器模式1、情景描述 不想改變現(xiàn)有代碼,也不能改變廠商的代碼,怎么辦?現(xiàn)有系統(tǒng)廠商類適配器比如第三方開發(fā)組件,該組件接口與我們自己系統(tǒng)的接口不相同,或者由于某種原因無法直接調(diào)用該組件,可以考慮適配器。適配器模式2、定義作用:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。系統(tǒng)的數(shù)據(jù)和行為都正確,但接口不符時,我們應(yīng)該考慮使用適配器,目的是使控制范圍之

2、外的一個原有對象與某個接口匹配。適配器模式主要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但是接口又與復(fù)用環(huán)境要求不一致的情況。分類:適配器模式分為類適配器模式和對象適配器模式。3、適配器介紹適配器模式該適配器模式所涉及的角色包括:目標(biāo)(Target)角色:這是客戶所期待的接口。因?yàn)镃#不支持多繼承,所以Target必須是接口,不可以是類。源(Adaptee)角色:需要適配的類。適配器(Adapter)角色:把源接口轉(zhuǎn)換成目標(biāo)接口。這一角色必須是類client希望使用的是Target.request(),而既有類使用的是Adaptee.SpecificRequest(),request()和SpecificR

3、equest()可能在返回值,參數(shù)列表都不同,類適配器模式和對象適配器模式都是通過嫁接一個Adapter進(jìn)行轉(zhuǎn)換。4、類適配器UML圖適配器模式適配器模式5、對象適配器UML圖6、兩種適配器模式比較類適配器對象適配器1、在Adapter類中可以對Adaptee類的方法進(jìn)行重定義;2、如果在Adaptee中添加了一個抽象方法,那么Adapter也要進(jìn)行相應(yīng)的改動高耦合;3、在Adapter中無法調(diào)用Adaptee其它子類的方法。1、不是很容易去構(gòu)造一個Adaptee類型的對象;2、Adaptee中添加新的抽象方法時,Adapter類不需要做任何調(diào)整;3、可以使用多態(tài)的方式在Adapter類中調(diào)用

4、Adaptee類子類的方法。適配器模式7、結(jié)論由于對象適配器的耦合度比較低,所以在很多的書中都建議使用對象適配器。在我們實(shí)際項(xiàng)目中,也是如此,能使用對象組合的方式,就不使用多繼承的方式。適配器模式迭代器模式1、情景描述在軟件系統(tǒng)的實(shí)現(xiàn)中,一定會遇到處理數(shù)組或者列表的情況,其內(nèi)部存儲的內(nèi)容都是相同的數(shù)據(jù)類型,當(dāng)遇到這種情況時,我們通常的做法是使用如下的for循環(huán)語句,對數(shù)組或者列表內(nèi)容進(jìn)行遍歷,從而處理其中的數(shù)據(jù)內(nèi)容:for (int i = 0; i array.length; i+) /其他處理動作System.out.println(arrayi);/其他處理動作2、定義迭代器模式迭代器模

5、式(Iterator Pattern),提供了一種模式順序訪問一個集合對象中各個元素的功能,而又不暴露其內(nèi)部的表示。3、模式分析迭代器模式如何遍歷集合對象1傳統(tǒng)的遍歷方法(1)耦合在集合對象內(nèi)部,讓容器實(shí)現(xiàn)遍歷功能;(2)讓調(diào)用集合對象的外部應(yīng)用自己實(shí)現(xiàn)遍歷算法。2增加第三方迭代器處理(1)迭代器需要做到能夠遍歷集合中的數(shù)據(jù);(2)迭代器在不需要暴露集合對象內(nèi)部實(shí)現(xiàn)細(xì)節(jié)的情況 下,能夠遍歷集合中的數(shù)據(jù);(3)迭代器獲取集合對象內(nèi)部數(shù)據(jù)的方式,也不需要依賴于集合對象下標(biāo),即生成迭代器之后,就完全脫離集合對象的約束。4、調(diào)用關(guān)系迭代器模式迭代器模式由以下角色組成:1迭代器角色(Iterator):迭代器角色負(fù)責(zé)定義訪問和遍歷元素的接口。2具體迭代器角色(Concrete Iterator):具體迭代器角色要實(shí)現(xiàn)迭代器接口,并要記錄遍歷中的當(dāng)前位置。3集合角色(Aggregate):集合角色負(fù)責(zé)提供創(chuàng)建具體迭代器角色的接口。4具體集合角色(Concrete Aggregate):具體集合角色實(shí)現(xiàn)創(chuàng)建具體迭代器角色的接口這個具體迭代器角色于該集合的結(jié)構(gòu)相關(guān)。5、UML圖迭代器模式迭代器模式就是分離了集合對象的遍歷行為,抽象出一個迭代器類來負(fù)責(zé),這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明地訪問集

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論