南華大學(xué)軟件設(shè)計(jì)模式實(shí)驗(yàn)_第1頁(yè)
南華大學(xué)軟件設(shè)計(jì)模式實(shí)驗(yàn)_第2頁(yè)
南華大學(xué)軟件設(shè)計(jì)模式實(shí)驗(yàn)_第3頁(yè)
南華大學(xué)軟件設(shè)計(jì)模式實(shí)驗(yàn)_第4頁(yè)
南華大學(xué)軟件設(shè)計(jì)模式實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、南華大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院軟件體系結(jié)構(gòu)與設(shè)計(jì)模式作業(yè) ( 2016秋季學(xué)期)學(xué) 號(hào): 20144350101 班 級(jí): 軟件工程1班 姓 名: 劉讓洲 任課老師: 蔣良衛(wèi) 作業(yè)內(nèi)容: 創(chuàng)建型設(shè)計(jì)模式 日期: 2016 年 11 月 6 日1 簡(jiǎn)單工廠模式1.1 作業(yè)題目使用簡(jiǎn)單工廠模式模擬女?huà)z(Nvwa)造人(Person),如果傳入?yún)?shù)M,則返回一個(gè)Man對(duì)象,如果傳入?yún)?shù)W。則返回一個(gè)對(duì)象Woman,用java語(yǔ)言實(shí)現(xiàn)該場(chǎng)景?,F(xiàn)在需要增加一個(gè)新的Robot類(lèi),如果傳入?yún)?shù)R,則返回一個(gè)Robot對(duì)象,對(duì)代碼進(jìn)行修改并注意女?huà)z的變化。(1)繪制簡(jiǎn)單工廠模式結(jié)構(gòu)視圖;(2)請(qǐng)繪制該實(shí)例類(lèi)圖,

2、并代碼實(shí)現(xiàn)。1.2 所用模式結(jié)構(gòu)視圖1.3 實(shí)例類(lèi)圖1.4 實(shí)例實(shí)現(xiàn)代碼公共類(lèi):lrz0101Personpackage com.bluesky;public class lrz0101Person public void play() System.out.println("我還是一坨泥巴,女?huà)z還沒(méi)有構(gòu)造我!"); 簡(jiǎn)單工廠類(lèi):lrz0101NvWapackage com.bluesky;public class lrz0101NvWa public lrz0101Person madeMan(String s) lrz0101Person person = null;

3、switch(s) case "M": person = new lrz0101Man(); break; case "W": person = new lrz0101Woman(); break; case "R": person = new lrz0101Robot(); break; default: System.out.println("Sorry,女?huà)z暫時(shí)沒(méi)有造這種人的能力"); person=new lrz0101Person(); return person; 子類(lèi)1:lrz0101Manpacka

4、ge com.bluesky;public class lrz0101Man extends lrz0101Person public void play() System.out.println("大家好,我是男人!我來(lái)自地球!"); 子類(lèi)2:lrz0101Womanpackage com.bluesky;public class lrz0101Woman extends lrz0101Person public void play() System.out.println("大家好,我是女人!我來(lái)自水星!"); 子類(lèi)2:lrz0101Robotpac

5、kage com.bluesky;public class lrz0101Robot extends lrz0101Person public void play() System.out.println("大家好,我是機(jī)器人!我來(lái)未知星球!"); 1.5 運(yùn)行結(jié)果2 工廠模式2.1 作業(yè)題目現(xiàn)需要設(shè)計(jì)一個(gè)程序來(lái)讀取多種不同類(lèi)型的圖片格式,針對(duì)每一種圖片格式都設(shè)計(jì)一個(gè)圖片讀取器ImgReader,如gif圖片讀取器GifReader用于讀取gif格式的圖片,jpg圖片讀取器JPGReader用于讀取jpg格式的圖片。圖片讀取器對(duì)象通過(guò)圖片讀取器工廠ImgReaderFact

6、ory來(lái)創(chuàng)建。ImgReaderFactory是一個(gè)抽象類(lèi),用于定義創(chuàng)建圖片讀取器的工廠方法,其GifReaderFactory和JPGReaderFactory用于創(chuàng)建具體的圖片讀取器對(duì)象。使用工廠方法模式,實(shí)現(xiàn)該程序的設(shè)計(jì)。 (1) 繪制工廠模式結(jié)構(gòu)視圖(2) 給出實(shí)例類(lèi)圖并實(shí)現(xiàn)代碼。2.2 所用模式結(jié)構(gòu)視圖2.3 實(shí)例類(lèi)圖2.4 實(shí)例實(shí)現(xiàn)代碼圖片讀取工廠類(lèi):lrz0101ImageReaderFactory package com.bluesky1;public class lrz0101ImageReaderFactory public lrz0101ImageReaderFactor

7、y productReaderFactory(String s) lrz0101ImageReaderFactory reader =null; if(s.equals("JPG") reader = new lrz0101JpgReaderFactory(); else if(s.equals("GIF") reader = new lrz0101GifReaderFactory(); else reader =new lrz0101ImageReaderFactory(); return reader; Jpg圖片讀取工廠類(lèi):lrz0101JpgRe

8、aderFactorypackage com.bluesky1;public class lrz0101JpgReaderFactory extends lrz0101ImageReaderFactorypublic lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101GifReader(); return iread; Gif圖片讀取工廠類(lèi):lrz0101JpgReaderFactorypackage com.bluesky1;public class lrz0101GifReaderFa

9、ctory extends lrz0101ImageReaderFactory public lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101GifReader(); return iread; 圖片讀取器類(lèi):lrz0101ImageReaderpackage com.bluesky1;public class lrz0101ImageReader public void readImage() Jpg圖片讀取器類(lèi):lrz0101JpgReader package com.bluesky

10、1;public class lrz0101JpgReader extends lrz0101ImageReaderpublic lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101JpgReader(); return iread; Gif圖片讀取器類(lèi):lrz0101GifReader package com.bluesky1;public class lrz0101GifReader extends lrz0101ImageReader public void readImage() S

11、ystem.out.println("Read GIF Image"); 測(cè)試類(lèi):Testpackage com.bluesky1;public class lrz0101Test public static void main(String args) lrz0101Test test = new lrz0101Test();lrz0101ImageReaderFactory irf = new lrz0101ImageReaderFactory();lrz0101ImageReaderFactory ir=ductReaderFactory("J

12、PG");lrz0101ImageReaderFactory ir1=ductReaderFactory("GIF");lrz0101ImageReaderFactory ir2=ductReaderFactory("PNG");piti(ir);piti(ir1);piti(ir2);public static void compiti(lrz0101ImageReaderFactory ir)if(ir instanceof lrz0101JpgReaderFactory )ir=(lrz0101JpgReade

13、rFactory)ir;lrz0101ImageReader ireader=(lrz0101JpgReaderFactory) ir).productImageReader();ireader.readImage();else if(ir instanceof lrz0101GifReaderFactory ) ir=(lrz0101GifReaderFactory)ir;lrz0101ImageReader ireader=(lrz0101GifReaderFactory) ir).productImageReader();ireader.readImage();elseSystem.ou

14、t.println("無(wú)法讀取該類(lèi)型的圖片格式");2.5 運(yùn)行結(jié)果 3 抽象工廠模式3.1 作業(yè)題目某軟件公司要推出一款新的手機(jī)游戲軟件,該軟件支持IOS、Android和Windows Phone等多個(gè)智能手機(jī)操作系統(tǒng)平臺(tái),針對(duì)不同的手機(jī)操作系統(tǒng),該游戲軟件提供了不同的游戲操作控制類(lèi)(OperatioinController)游戲界面控制類(lèi)(InterfaceController),并提供的相應(yīng)的工廠類(lèi)來(lái)封裝這些類(lèi)的初始化過(guò)程。該軟件要求具有較好的擴(kuò)展性,以支持新的操作系統(tǒng)平臺(tái),為了滿足上述要求,試采用抽象工廠模式對(duì)其進(jìn)行設(shè)計(jì)。(1)繪制抽象工廠模式結(jié)構(gòu)視圖;(2)請(qǐng)繪

15、制該實(shí)例類(lèi)圖,并代碼實(shí)現(xiàn)。3.2 所用模式結(jié)構(gòu)視圖3.3 實(shí)例類(lèi)圖3.4 實(shí)例實(shí)現(xiàn)代碼操作系統(tǒng)父類(lèi):lrz0101OperatingSystempackage com.bluesky4;public class lrz0101OperatingSystem public lrz0101GameController gc;public lrz0101GameUiController guic;public lrz0101GameController getGameCtroller()return gc;public lrz0101GameUiController getGameUiControl

16、ler()return guic;游戲控制父類(lèi):lrz0101GameControllerpackage com.bluesky4;public class lrz0101GameController public void play() System.out.println("游戲控制加載中。"); 游戲界面控制父類(lèi):lrz0101GameUiControllerpackage com.bluesky4;public class lrz0101GameUiController public void showUI() System.out.println("界面

17、加載中。"); IOS工廠類(lèi):lrz0101IosSystem package com.bluesky4;public class lrz0101IosSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller() this.gc=new lrz0101IosGameController();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101IosUiCon

18、troller();return this.guic;Android工廠類(lèi):lrz0101AndroidSystempackage com.bluesky4;public class lrz0101AndroidSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller()this.gc=new lrz0101AndroidGameControlller();return this.gc;public lrz0101GameUiController getGameUiController()

19、this.guic=new lrz0101AndroidUiController();return this.guic;Windows工廠類(lèi):lrz0101WindowsSystem package com.bluesky4;public class lrz0101WindowsSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller()this.gc=new lrz0101WindowsGameController();return this.gc;public lrz0101GameU

20、iController getGameUiController()this.guic=new lrz0101WindoswUiController();return this.guic;IOS游戲控制類(lèi): lrz0101IosGameController package com.bluesky4;public class lrz0101IosGameController extends lrz0101GameControllerpublic void play()System.out.println("IOS游戲控制加載中.");IOS游戲界面控制類(lèi):lrz0101IosU

21、iControllerpackage com.bluesky4;public class lrz0101IosUiController extends lrz0101GameUiControllerpublic void showUI()System.out.println("IOS游戲界面加載中.");public void p()System.out.println("Hello");Android游戲控制類(lèi):lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101A

22、ndroidGameControlller extends lrz0101GameControllerpublic void play()System.out.println("Android游戲控制加載中.");Android游戲界面控制類(lèi):lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101AndroidUiController extends lrz0101GameUiControllerpublic void showUI() System.out.println("A

23、ndroid游戲界面加載中."); Windows游戲控制類(lèi):lrz0101WindowsGameController package com.bluesky4;public class lrz0101WindowsGameController extends lrz0101GameControllerpublic void play()System.out.println("Windows游戲控制加載中.");Windows游戲界面控制類(lèi):lrz0101WindoswUiControllerpackage com.bluesky4;public class lr

24、z0101WindoswUiController extends lrz0101GameUiController public void showUI()System.out.println("Windows游戲界面加載中.");測(cè)試類(lèi):lrz0101Testpackage com.bluesky4;public class lrz0101Test public static void main(String args) lrz0101Test test= new lrz0101Test();lrz0101OperatingSystem ios = new lrz0101I

25、osSystem();lrz0101OperatingSystem android = new lrz0101AndroidSystem();lrz0101OperatingSystem windows = new lrz0101WindowsSystem();test.show(ios);System.out.println();test.show(android);System.out.println();test.show(windows);public static void show(lrz0101OperatingSystem ios)lrz0101OperatingSystem

26、os; lrz0101GameController iosgc;lrz0101GameUiController iosuic;iosgc=ios.getGameCtroller();iosuic=ios.getGameUiController();iosgc.play();iosuic.showUI();3.5 運(yùn)行結(jié)果4 建造者模式4.1作業(yè)題目 某軟件公司要開(kāi)發(fā)一個(gè)視頻播放軟件,為了給用戶提供方便,該播放軟件提供了多種界面顯示模式,如完整模式、精簡(jiǎn)模式、記憶模式、網(wǎng)絡(luò)模式等。在不同的顯示模式下,主界面的組成元素有所差異,如在完整模式下將顯示菜單、播放列表、主窗口、控制條等,在精簡(jiǎn)模式下只顯

27、示主窗口和控制條,而在記憶模式下,將顯示主窗口、控制條、收藏列表等。試用建造者模式設(shè)計(jì)軟件。(1) 給出建造者模式等結(jié)構(gòu)視圖(2)給出該實(shí)例等類(lèi)圖及代碼實(shí)現(xiàn)4.2 所用模式結(jié)構(gòu)視圖4.3 實(shí)例類(lèi)圖4.4 實(shí)例實(shí)現(xiàn)代碼主窗口類(lèi):lrz0101MainScreenpackage com.bluesky3;public class lrz0101MainScreen public String menu; public String playList; public String mainWindow; public String controlBar;模式建造類(lèi):lrz0101ModelBulid

28、er package com.bluesky3; public class lrz0101ModelBulider protected lrz0101MainScreen screen = new lrz0101MainScreen();public void buildMenu()public void buildPlayList() public void buildMainWindow() public void buildControlBar() public lrz0101MainScreen getScreen() return screen; 模式控制類(lèi):lrz0101Model

29、Controllerpackage com.bluesky3;public class lrz0101ModelController private lrz0101ModelBulider mb; public void setModeBuilder(lrz0101ModelBulider mb ) this.mb = mb; public lrz0101MainScreen construct() mb.buildControlBar(); mb.buildMainWindow(); mb.buildPlayList(); mb.buildMenu(); mb.getScreen() ; r

30、eturn mb.getScreen(); 完整顯示類(lèi):lrz0101FullStylepackage com.bluesky3;public class lrz0101FullStyle extends lrz0101ModelBuliderpublic void buildMenu() screen.menu="菜單欄顯示"public void buildPlayList() screen.playList="播放列表顯示"public void buildMainWindow() screen.mainWindow="主窗口顯示&quo

31、t;public void buildControlBar() screen.controlBar="控制條顯示"簡(jiǎn)單模式類(lèi):lrz0101SimpleStylepackage com.bluesky3;public class lrz0101SimpleStyle extends lrz0101ModelBulider public void buildMenu() screen.menu="菜單欄不顯示"public void buildPlayList() screen.playList="播放列表不顯示"public void

32、 buildMainWindow() screen.mainWindow="主窗口顯示"public void buildControlBar() screen.controlBar="控制條顯示"記憶模式類(lèi):lrz0101MemotyStylepackage com.bluesky3;public class lrz0101MemotyStyle extends lrz0101ModelBulider public void buildMenu() screen.menu="菜單欄不顯示"public void buildPlayL

33、ist() screen.playList="播放列表顯示"public void buildMainWindow() screen.mainWindow="主窗口顯示"public void buildControlBar() screen.controlBar="控制條顯示"網(wǎng)絡(luò)模式類(lèi):lrz0101InternetStylepackage com.bluesky3;public class lrz0101InternetStyle extends lrz0101ModelBuliderpublic void buildMenu(

34、) screen.menu="菜單欄顯示"public void buildPlayList() screen.playList="播放列表不顯示"public void buildMainWindow() screen.mainWindow="主窗口顯示"public void buildControlBar() screen.controlBar="控制條顯示"測(cè)試類(lèi):lrz0101Testpackage com.bluesky3;public class lrz0101Test public static v

35、oid main(String args) lrz0101Test test = new lrz0101Test();lrz0101ModelController smc = new lrz0101ModelController() ; lrz0101ModelBulider mb= new lrz0101FullStyle(); /構(gòu)造完整模式界面 lrz0101ModelBulider mb1= new lrz0101SimpleStyle();/構(gòu)造簡(jiǎn)單模式lrz0101ModelBulider mb2= new lrz0101MemotyStyle();/構(gòu)造記憶模式lrz0101Mo

36、delBulider mb3= new lrz0101InternetStyle();/構(gòu)造網(wǎng)絡(luò)模式lrz0101MainScreen screen; smc.setModeBuilder(mb); screen = smc.construct() ; System.out.println("完整模式:"); test.display(screen); System.out.println(); smc.setModeBuilder(mb1); screen = smc.construct() ; System.out.println("簡(jiǎn)單模式:");

37、 test.display(screen); System.out.println(); smc.setModeBuilder(mb2); screen = smc.construct() ; System.out.println("記憶模式:"); test.display(screen); System.out.println(); smc.setModeBuilder(mb3); screen = smc.construct() ; System.out.println("網(wǎng)絡(luò)模式:"); test.display(screen); public

38、static void display(lrz0101MainScreen screen) System.out.println(screen.menu); System.out.println(screen.playList); System.out.println(screen.mainWindow); System.out.println(screen.controlBar); 4.5 運(yùn)行結(jié)果5 原型模式5.1 作業(yè)題目某數(shù)據(jù)處理軟件需要增加一個(gè)圖表復(fù)制功能。在圖表對(duì)象(DataChart)中包含一個(gè)數(shù)據(jù)集對(duì)象(DataSet)。數(shù)據(jù)集對(duì)象用于封裝要顯示的數(shù)據(jù),用戶可以通過(guò)界面上的復(fù)制

39、按鈕將該圖表復(fù)制一份,復(fù)制后,即可得到新的圖表對(duì)象,然后可以修改新圖表的編號(hào)、顏色、數(shù)據(jù)。試用原型模式設(shè)計(jì)軟件實(shí)現(xiàn)深克隆。(1) 給出原型模式等結(jié)構(gòu)視圖(2) 給出該實(shí)例等類(lèi)圖及代碼實(shí)現(xiàn)5.2 所用模式結(jié)構(gòu)視圖5.3 實(shí)例類(lèi)圖5.4 實(shí)例實(shí)現(xiàn)代碼 顏色類(lèi):lrz0101Colorpackage com.bluesky2;public class lrz0101Color public String color;public lrz0101Color(String color)this.color=color; 自我克隆類(lèi) :lrz0101Datachatpackage com.bluesky2

40、;public class lrz0101Datachat public lrz0101Dataset dataset;public void deepClone(lrz0101Dataset dataset)dataset.no=this.dataset.no;dataset.color=this.dataset.color;dataset.data=this.dataset.data; 自我克隆需要新創(chuàng)建的類(lèi) :lrz0101Datasetpackage com.bluesky2;public class lrz0101Dataset public lrz0101Color color;public int

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論