實驗5_軟工1302_2013011342_阮翀_第1頁
實驗5_軟工1302_2013011342_阮翀_第2頁
實驗5_軟工1302_2013011342_阮翀_第3頁
實驗5_軟工1302_2013011342_阮翀_第4頁
實驗5_軟工1302_2013011342_阮翀_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗五 迭代器模式、中介者模式的應(yīng)用一、實驗?zāi)康耐ㄟ^該實驗,理解迭代器模式、中介者模式的意圖、結(jié)構(gòu),在軟件開發(fā)中使用這些模式并進行功能驗證。二、實驗內(nèi)容1. 某商品管理系統(tǒng)的商品名稱存儲在一個字符串數(shù)組中,現(xiàn)需要自定義一個雙向迭代器實現(xiàn)對該商品名稱數(shù)組的雙向(前向和后向)遍歷,繪制類圖并編程實現(xiàn)。可以參考圖1類圖,也可以自行設(shè)計。 圖1商品名稱遍歷的類圖2. 使用中介者模式來說明聯(lián)合國的作用。注:可以將聯(lián)合國定義為抽象中介者類,聯(lián)合國下屬機構(gòu)如WTO、WHO等作為具體中介者類,國家作為抽象同事類,將中國、美國等國家作為具體同事類??梢詤⒖紙D2或自行設(shè)計。 圖2 聯(lián)合國模擬類圖三、實驗步驟與要求

2、1 對于以上題目要認真分析和理解題意,程序中要求使用相應(yīng)的模式。2 上機錄入,使用JDK編譯器調(diào)試、運行、驗證程序。 3 請指導(dǎo)教師審查程序和運行結(jié)果并評定成績;4 撰寫并上交實驗報告。四、實驗原理: 1、迭代器模式迭代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內(nèi)部表示。迭代器模式模式的關(guān)鍵是將遍歷集合的任務(wù)交給一個稱作迭代器的對象。適合使用迭代器模式的情景有:l 讓用戶訪問一個集合中的對象,但不想暴露對象在集合中的存儲結(jié)構(gòu)。l 希望對遍歷不同的集合提供一個統(tǒng)一的接口。迭代器模式的UML類圖:圖3 迭代器模式的類圖2、中介者模式用一個中介對象來封裝一系列的對象交

3、互。中介者使各對象不需要顯示地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。中介者模式的關(guān)鍵是將對象之間的交互封裝在稱作中介者的對象中,中介者使各對象不需要顯示地相互引用,這些對象只包含中介者的引用。適合使用中介者模式的情景有:l 許多對象以復(fù)雜的方式交互,所導(dǎo)致的依賴關(guān)系使系統(tǒng)難以理解和維護l 一個對象引用其他很多對象,導(dǎo)致難以復(fù)用該對象中介者模式的UML類圖:圖4 中介者模式的類圖五、 上機報告內(nèi)容1、 班級、學(xué)號、姓名、實驗完成日期;2、 實驗題目;3、 設(shè)計方案:給出你的設(shè)計方案,包括結(jié)構(gòu)類圖及相關(guān)說明;4、 源代碼:設(shè)計方案中各個類和接口的源代碼,包括測試主類的源代碼

4、. 5、 測試數(shù)據(jù)及運行結(jié)果6、 總結(jié):1) 運用設(shè)計模式總結(jié):對所運用的設(shè)計模式的名稱,分類,意圖,結(jié)構(gòu),角色作用的總結(jié),所運用的面向?qū)ο笤O(shè)計原則。2) 本次實驗遇到的問題、如何解決的;本次實驗的經(jīng)驗、體會、改進設(shè)想等。 六、實驗成績考核方法實驗成績由出勤、實驗完成情況以及實驗報告綜合評定??己顺煽儽壤峙洌撼銮谡?5%、實驗完成情況占50%、實驗報告占35%七、上機安排本實驗共需2個學(xué)時??偨Y(jié)一、迭代器模式迭代器模式(Iterator),提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內(nèi)部表示。 當你需要訪問一個聚合對象,而且不管這些對象是什么都需要遍歷的時候,就應(yīng)該考慮使

5、用迭代器模式。另外,當需要對聚集有多種方式遍歷時,可以考慮去使用迭代器模式。迭代器模式為遍歷不同的聚集結(jié)構(gòu)提供如開始、下一個、是否結(jié)束、當前哪一項等統(tǒng)一的接口。迭代器模式(Iterator)就是分離了聚合對象的遍歷行為,抽象出一個迭代器來負責(zé)這樣既可以做到不暴露集合的內(nèi)部結(jié)構(gòu),又可讓外部代碼透明的訪問集合內(nèi)部數(shù)據(jù)。二、中介模式在面向?qū)ο缶幊讨校粋€類必然會與其他的類發(fā)生依賴關(guān)系,完全獨立的類是沒有意義的。一個類同時依賴多個類的情況也相當普遍,既然存在這樣的情況,說明,一對多的依賴關(guān)系有它的合理性,適當?shù)氖褂弥薪檎吣J娇梢允乖玖鑱y的對象關(guān)系清晰,但是如果濫用,則可能會帶來反的效果。一般來說,只

6、有對于那種同事類之間是網(wǎng)狀結(jié)構(gòu)的關(guān)系,才會考慮使用中介者模式??梢詫⒕W(wǎng)狀結(jié)構(gòu)變?yōu)樾菭罱Y(jié)構(gòu),使同事類之間的關(guān)系變的清晰一些。 中介者模式是一種比較常用的模式,也是一種比較容易被濫用的模式。對于大多數(shù)的情況,同事類之間的關(guān)系不會復(fù)雜到混亂不堪的網(wǎng)狀結(jié)構(gòu),因此,大多數(shù)情況下,將對象間的依賴關(guān)系封裝的同事類內(nèi)部就可以的,沒有必要非引入中介者模式。濫用中介者模式,只會讓事情變的更復(fù)雜。 抽象中介者:定義好同事類對象到中介者對象的接口,用于各個同事類之間的通信。一般包括一個或幾個抽象的事件方法,并由子類去實現(xiàn)。 中介者實現(xiàn)類:從抽象中介者繼承而來,實現(xiàn)抽象中介者中定義的事件方法。從一個同事類接收消息,然后

7、通過消息影響其他同時類。 同事類:如果一個對象會影響其他的對象,同時也會被其他對象影響,那么這兩個對象稱為同事類。在類圖中,同事類只有一個,這其實是現(xiàn)實的省略,在實際應(yīng)用中,同事類一般由多個組成,他們之間相互影響,相互依賴。同事類越多,關(guān)系越復(fù)雜。并且,同事類也可以表現(xiàn)為繼承了同一個抽象類的一組實現(xiàn)組成。在中介者模式中,同事類之間必須通過中介者才能進行消息傳遞。附錄:(源代碼)1迭代器模式public class Application public static void main(String args)String Name = new String10 ;MyprodcutList l

8、ist = new MyprodcutList(Name);MyLterator lterator = new MyLterator(list);for(int i=0;i10;i+)lterator.previous();System.out.print(n);for(int i=0;i10;i+)lterator.next();/迭代器public interface Lterator public void next();public boolean isLast();public void previous();public boolean isFirst();public Strin

9、g getNextitem();public String getPreviousitem();/具體迭代器public class MyLterator implements Lteratorprivate String productName = new String10;private int index1 = 0;/向后遍歷private int index2 = productName.length;/向前遍歷public MyLterator(ProductList list)ductName = list.getProductsName();Overridepub

10、lic void next() if(isLast()System.out.println(getNextitem();elseSystem.out.println(getNextitem();System.out.println(結(jié)束向后遍歷);Overridepublic boolean isLast() if(productName.length-1 = index1)return false;elsereturn true;Overridepublic void previous() if(isFirst()System.out.println(getPreviousitem();el

11、seSystem.out.println(getPreviousitem();System.out.println(結(jié)束向前遍歷);Overridepublic boolean isFirst() if(index2 = 1)return false;elsereturn true;Overridepublic String getNextitem() int i = index1 + 1;String str = 第 + i + 個: + productNameindex1;index1 = index1 + 1;return str;Overridepublic String getPre

12、viousitem() int i = index2;index2 = index2 - 1;String str = 第 + i + 個: + productNameindex2;return str;/具體集合public class MyprodcutList extends ProductListpublic MyprodcutList(String productsName) super(productsName);public Lterator getLtreator()return null;/集合public abstract class ProductList private

13、 String productsName = new String10;public ProductList(String productsName)ductsName = productsName;for(int i=0;i10;i+)int j = i+1;productsNamei = Product + j;public String getProductsName()return productsName;public Lterator getLtreator()return null;2中介者模式/具體同事public class America extends C

14、ountrypublic void getMessage(String message)System.out.println(message);public class Application public static void main(String args)WTO wto = new WTO();China cn = new China();America us = new America();wto.setChina(cn);wto.setAmerica(us);/具體同事public class China extends Countrypublic void getMessage

15、(String message)System.out.println(message);/同事public class Country public UnitedNations un;public void setUnitedNations(UnitedNations un)this.un = un;public void dedare(String message)System.out.println(message);public void getMessage(String message)System.out.println(message);/中介public class UnitedNations public void dedare(String message, Country country) /具體中介public class WTO extends UnitedNations private China cn;private America us;public void setChina(China cn) = cn;cn.getMessage(中國

溫馨提示

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

評論

0/150

提交評論