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

下載本文檔

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

文檔簡介

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

2、模式結(jié)構(gòu)視圖1.3 實(shí)例類圖1.4 實(shí)例實(shí)現(xiàn)代碼公共類:lrz0101Personpackage com.bluesky;public class lrz0101Person public void play() System.out.println(我還是一坨泥巴,女媧還沒有構(gòu)造我!); 簡單工廠類:lrz0101NvWapackage com.bluesky;public class lrz0101NvWa public lrz0101Person madeMan(String s) lrz0101Person person = null; switch(s) case M: person

3、 = new lrz0101Man(); break; case W: person = new lrz0101Woman(); break; case R: person = new lrz0101Robot(); break; default: System.out.println(Sorry,女媧暫時(shí)沒有造這種人的能力); person=new lrz0101Person(); return person; 子類1:lrz0101Manpackage com.bluesky;public class lrz0101Man extends lrz0101Person public void

4、 play() System.out.println(大家好,我是男人!我來自地球!); 子類2:lrz0101Womanpackage com.bluesky;public class lrz0101Woman extends lrz0101Person public void play() System.out.println(大家好,我是女人!我來自水星!); 子類2:lrz0101Robotpackage com.bluesky;public class lrz0101Robot extends lrz0101Person public void play() System.out.p

5、rintln(大家好,我是機(jī)器人!我來未知星球!); 1.5 運(yùn)行結(jié)果2 工廠模式2.1 作業(yè)題目現(xiàn)需要設(shè)計(jì)一個(gè)程序來讀取多種不同類型的圖片格式,針對每一種圖片格式都設(shè)計(jì)一個(gè)圖片讀取器ImgReader,如gif圖片讀取器GifReader用于讀取gif格式的圖片,jpg圖片讀取器JPGReader用于讀取jpg格式的圖片。圖片讀取器對象通過圖片讀取器工廠ImgReaderFactory來創(chuàng)建。ImgReaderFactory是一個(gè)抽象類,用于定義創(chuàng)建圖片讀取器的工廠方法,其GifReaderFactory和JPGReaderFactory用于創(chuàng)建具體的圖片讀取器對象。使用工廠方法模式,實(shí)現(xiàn)該

6、程序的設(shè)計(jì)。 (1) 繪制工廠模式結(jié)構(gòu)視圖(2) 給出實(shí)例類圖并實(shí)現(xiàn)代碼。2.2 所用模式結(jié)構(gòu)視圖2.3 實(shí)例類圖2.4 實(shí)例實(shí)現(xiàn)代碼圖片讀取工廠類:lrz0101ImageReaderFactory package com.bluesky1;public class lrz0101ImageReaderFactory public lrz0101ImageReaderFactory productReaderFactory(String s) lrz0101ImageReaderFactory reader =null; if(s.equals(JPG) reader = new lrz01

7、01JpgReaderFactory(); else if(s.equals(GIF) reader = new lrz0101GifReaderFactory(); else reader =new lrz0101ImageReaderFactory(); return reader; Jpg圖片讀取工廠類:lrz0101JpgReaderFactorypackage com.bluesky1;public class lrz0101JpgReaderFactory extends lrz0101ImageReaderFactorypublic lrz0101ImageReader prod

8、uctImageReader() lrz0101ImageReader iread = new lrz0101GifReader(); return iread; Gif圖片讀取工廠類:lrz0101JpgReaderFactorypackage com.bluesky1;public class lrz0101GifReaderFactory extends lrz0101ImageReaderFactory public lrz0101ImageReader productImageReader() lrz0101ImageReader iread = new lrz0101GifRead

9、er(); return iread; 圖片讀取器類:lrz0101ImageReaderpackage com.bluesky1;public class lrz0101ImageReader public void readImage() Jpg圖片讀取器類:lrz0101JpgReader package com.bluesky1;public class lrz0101JpgReader extends lrz0101ImageReaderpublic lrz0101ImageReader productImageReader() lrz0101ImageReader iread =

10、new lrz0101JpgReader(); return iread; Gif圖片讀取器類:lrz0101GifReader package com.bluesky1;public class lrz0101GifReader extends lrz0101ImageReader public void readImage() System.out.println(Read GIF Image); 測試類:Testpackage com.bluesky1;public class lrz0101Test public static void main(String args) lrz010

11、1Test test = new lrz0101Test();lrz0101ImageReaderFactory irf = new lrz0101ImageReaderFactory();lrz0101ImageReaderFactory ir=ductReaderFactory(JPG);lrz0101ImageReaderFactory ir1=ductReaderFactory(GIF);lrz0101ImageReaderFactory ir2=ductReaderFactory(PNG);piti(ir);p

12、iti(ir1);piti(ir2);public static void compiti(lrz0101ImageReaderFactory ir)if(ir instanceof lrz0101JpgReaderFactory )ir=(lrz0101JpgReaderFactory)ir;lrz0101ImageReader ireader=(lrz0101JpgReaderFactory) ir).productImageReader();ireader.readImage();else if(ir instanceof lrz0101GifReaderFactory

13、) ir=(lrz0101GifReaderFactory)ir;lrz0101ImageReader ireader=(lrz0101GifReaderFactory) ir).productImageReader();ireader.readImage();elseSystem.out.println(無法讀取該類型的圖片格式);2.5 運(yùn)行結(jié)果 3 抽象工廠模式3.1 作業(yè)題目某軟件公司要推出一款新的手機(jī)游戲軟件,該軟件支持IOS、Android和Windows Phone等多個(gè)智能手機(jī)操作系統(tǒng)平臺(tái),針對不同的手機(jī)操作系統(tǒng),該游戲軟件提供了不同的游戲操作控制類(OperatioinCon

14、troller)游戲界面控制類(InterfaceController),并提供的相應(yīng)的工廠類來封裝這些類的初始化過程。該軟件要求具有較好的擴(kuò)展性,以支持新的操作系統(tǒng)平臺(tái),為了滿足上述要求,試采用抽象工廠模式對其進(jìn)行設(shè)計(jì)。(1)繪制抽象工廠模式結(jié)構(gòu)視圖;(2)請繪制該實(shí)例類圖,并代碼實(shí)現(xiàn)。3.2 所用模式結(jié)構(gòu)視圖3.3 實(shí)例類圖3.4 實(shí)例實(shí)現(xiàn)代碼操作系統(tǒng)父類:lrz0101OperatingSystempackage com.bluesky4;public class lrz0101OperatingSystem public lrz0101GameController gc;public

15、lrz0101GameUiController guic;public lrz0101GameController getGameCtroller()return gc;public lrz0101GameUiController getGameUiController()return guic;游戲控制父類:lrz0101GameControllerpackage com.bluesky4;public class lrz0101GameController public void play() System.out.println(游戲控制加載中。); 游戲界面控制父類:lrz0101Ga

16、meUiControllerpackage com.bluesky4;public class lrz0101GameUiController public void showUI() System.out.println(界面加載中。); IOS工廠類:lrz0101IosSystem package com.bluesky4;public class lrz0101IosSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller() this.gc=new lrz0101IosGameC

17、ontroller();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101IosUiController();return this.guic;Android工廠類:lrz0101AndroidSystempackage com.bluesky4;public class lrz0101AndroidSystem extends lrz0101OperatingSystempublic lrz0101GameController getGameCtroller()thi

18、s.gc=new lrz0101AndroidGameControlller();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101AndroidUiController();return this.guic;Windows工廠類:lrz0101WindowsSystem package com.bluesky4;public class lrz0101WindowsSystem extends lrz0101OperatingSystempublic lrz0101G

19、ameController getGameCtroller()this.gc=new lrz0101WindowsGameController();return this.gc;public lrz0101GameUiController getGameUiController()this.guic=new lrz0101WindoswUiController();return this.guic;IOS游戲控制類: lrz0101IosGameController package com.bluesky4;public class lrz0101IosGameController exten

20、ds lrz0101GameControllerpublic void play()System.out.println(IOS游戲控制加載中.);IOS游戲界面控制類:lrz0101IosUiControllerpackage com.bluesky4;public class lrz0101IosUiController extends lrz0101GameUiControllerpublic void showUI()System.out.println(IOS游戲界面加載中.);public void p()System.out.println(Hello);Android游戲控制類

21、:lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101AndroidGameControlller extends lrz0101GameControllerpublic void play()System.out.println(Android游戲控制加載中.);Android游戲界面控制類:lrz0101AndroidGameControlllerpackage com.bluesky4;public class lrz0101AndroidUiController extends lrz0101Gam

22、eUiControllerpublic void showUI() System.out.println(Android游戲界面加載中.); Windows游戲控制類:lrz0101WindowsGameController package com.bluesky4;public class lrz0101WindowsGameController extends lrz0101GameControllerpublic void play()System.out.println(Windows游戲控制加載中.);Windows游戲界面控制類:lrz0101WindoswUiController

23、package com.bluesky4;public class lrz0101WindoswUiController extends lrz0101GameUiController public void showUI()System.out.println(Windows游戲界面加載中.);測試類:lrz0101Testpackage com.bluesky4;public class lrz0101Test public static void main(String args) lrz0101Test test= new lrz0101Test();lrz0101OperatingS

24、ystem ios = new lrz0101IosSystem();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

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

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

27、;模式建造類:lrz0101ModelBulider 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 sc

28、reen; 模式控制類:lrz0101ModelControllerpackage 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.buildMe

29、nu(); mb.getScreen() ; return mb.getScreen(); 完整顯示類:lrz0101FullStylepackage com.bluesky3;public class lrz0101FullStyle extends lrz0101ModelBuliderpublic void buildMenu() screen.menu=菜單欄顯示;public void buildPlayList() screen.playList=播放列表顯示;public void buildMainWindow() screen.mainWindow=主窗口顯示;public

30、void buildControlBar() screen.controlBar=控制條顯示;簡單模式類:lrz0101SimpleStylepackage com.bluesky3;public class lrz0101SimpleStyle extends lrz0101ModelBulider public void buildMenu() screen.menu=菜單欄不顯示;public void buildPlayList() screen.playList=播放列表不顯示;public void buildMainWindow() screen.mainWindow=主窗口顯示

31、;public void buildControlBar() screen.controlBar=控制條顯示;記憶模式類:lrz0101MemotyStylepackage com.bluesky3;public class lrz0101MemotyStyle extends lrz0101ModelBulider public void buildMenu() screen.menu=菜單欄不顯示;public void buildPlayList() screen.playList=播放列表顯示;public void buildMainWindow() screen.mainWindo

32、w=主窗口顯示;public void buildControlBar() screen.controlBar=控制條顯示;網(wǎng)絡(luò)模式類:lrz0101InternetStylepackage com.bluesky3;public class lrz0101InternetStyle extends lrz0101ModelBuliderpublic void buildMenu() screen.menu=菜單欄顯示;public void buildPlayList() screen.playList=播放列表不顯示;public void buildMainWindow() screen

33、.mainWindow=主窗口顯示;public void buildControlBar() screen.controlBar=控制條顯示;測試類:lrz0101Testpackage com.bluesky3;public class lrz0101Test public static void main(String args) lrz0101Test test = new lrz0101Test();lrz0101ModelController smc = new lrz0101ModelController() ; lrz0101ModelBulider mb= new lrz01

34、01FullStyle(); /構(gòu)造完整模式界面 lrz0101ModelBulider mb1= new lrz0101SimpleStyle();/構(gòu)造簡單模式lrz0101ModelBulider mb2= new lrz0101MemotyStyle();/構(gòu)造記憶模式lrz0101ModelBulider mb3= new lrz0101InternetStyle();/構(gòu)造網(wǎng)絡(luò)模式lrz0101MainScreen screen; smc.setModeBuilder(mb); screen = smc.construct() ; System.out.println(完整模式:)

35、; test.display(screen); System.out.println(); smc.setModeBuilder(mb1); screen = smc.construct() ; System.out.println(簡單模式:); test.display(screen); System.out.println(); smc.setModeBuilder(mb2); screen = smc.construct() ; System.out.println(記憶模式:); test.display(screen); System.out.println(); smc.setM

36、odeBuilder(mb3); screen = smc.construct() ; System.out.println(網(wǎng)絡(luò)模式:); test.display(screen); public 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)行

37、結(jié)果5 原型模式5.1 作業(yè)題目某數(shù)據(jù)處理軟件需要增加一個(gè)圖表復(fù)制功能。在圖表對象(DataChart)中包含一個(gè)數(shù)據(jù)集對象(DataSet)。數(shù)據(jù)集對象用于封裝要顯示的數(shù)據(jù),用戶可以通過界面上的復(fù)制按鈕將該圖表復(fù)制一份,復(fù)制后,即可得到新的圖表對象,然后可以修改新圖表的編號、顏色、數(shù)據(jù)。試用原型模式設(shè)計(jì)軟件實(shí)現(xiàn)深克隆。(1) 給出原型模式等結(jié)構(gòu)視圖(2) 給出該實(shí)例等類圖及代碼實(shí)現(xiàn)5.2 所用模式結(jié)構(gòu)視圖5.3 實(shí)例類圖5.4 實(shí)例實(shí)現(xiàn)代碼 顏色類:lrz0101Colorpackage com.bluesky2;public class lrz0101Color public String

38、 color;public lrz0101Color(String color)this.color=color; 自我克隆類 :lrz0101Datachatpackage com.bluesky2;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)建的類 :lrz0101Datasetpackage com.bluesky2;public

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論