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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

7、通過消息影響其他同時(shí)類。 同事類:如果一個(gè)對(duì)象會(huì)影響其他的對(duì)象,同時(shí)也會(huì)被其他對(duì)象影響,那么這兩個(gè)對(duì)象稱為同事類。在類圖中,同事類只有一個(gè),這其實(shí)是現(xiàn)實(shí)的省略,在實(shí)際應(yīng)用中,同事類一般由多個(gè)組成,他們之間相互影響,相互依賴。同事類越多,關(guān)系越復(fù)雜。并且,同事類也可以表現(xiàn)為繼承了同一個(gè)抽象類的一組實(shí)現(xiàn)組成。在中介者模式中,同事類之間必須通過中介者才能進(jì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 + 個(gè): + productNameindex1;index1 = index1 + 1;return str;Overridepublic String getPre

12、viousitem() int i = index2;index2 = index2 - 1;String str = 第 + i + 個(gè): + 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(中國(guó)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論