


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章創(chuàng)建型模式實(shí)訓(xùn)3.3實(shí)訓(xùn)練習(xí)填空題1.某系統(tǒng)提供一個(gè)簡單計(jì)算器,具有簡單的加法和減法功能,系統(tǒng)可以根據(jù)用戶的選擇實(shí)例化相應(yīng)的 操作類?,F(xiàn)使用簡單工廠模式設(shè)計(jì)該系統(tǒng),類圖如圖1所示:圖i類圖在圖1中,Operation是抽象類,其中定義了抽象方法 getResult(),其子類AddOperation用于實(shí)現(xiàn)加法 操作,SubOperation用于實(shí)現(xiàn)減法操作, Calculator是簡單工廠類,工廠方法為 createOperation(),該方法接 收一個(gè)char類型的字符參數(shù),如果傳入的參數(shù)為 + ”,工廠方法返回一個(gè) AddOperation類型的對(duì)象,如果 傳入的參數(shù)為-”,則返
2、回一個(gè)SubOperation類型的對(duì)象。【Java代碼】abstract class Operati onprotected int nu mberA;protected int nu mberB;/ numberA 和 numberB 的 Setter 方法和 Getter 方法省略 public (1) i nt getResult();class AddOperati on exte nds Operati onpublic int getResult()retur n nu mberA + nu mberB;class SubOperati on exte nds Operati o
3、npublic int getResult()retur n nu mberA - nu mberB;class Calculatorpublic (2) createOperation(char operator)Operati on op = n ull;case +:op =(4);break;case -:op =(5):break; :class Testpublic static void main(String args)int result;Operati on op1 = Calculator.createOperati on (+);op1.setNumberA(20);o
4、pl.setNumberB(IO);result = (7):System.out.pri ntln( result);2. 某軟件公司欲開發(fā)一個(gè)數(shù)據(jù)格式轉(zhuǎn)換工具,可以將不同數(shù)據(jù)源如txt文件、數(shù)據(jù)庫、Excel表格中的數(shù)據(jù)轉(zhuǎn)換成XML格式。為了讓系統(tǒng)具有更好的擴(kuò)展性,在未來支持新類型的數(shù)據(jù)源,開發(fā)人員使用工廠方 法模式設(shè)計(jì)該轉(zhuǎn)換工具的核心類。在工廠類中封裝了具體轉(zhuǎn)換類的初始化和創(chuàng)建過程,客戶端只需使用工 廠類即可獲得具體的轉(zhuǎn)換類對(duì)象,再調(diào)用其相應(yīng)方法實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換操作。其類圖如圖1所示:Con vertorCreatorCon vertor+ getC on vertor ()+ tran s
5、form ().a aDBCo nvertorCreatorTXTCo nvertorCreator+ getC on vertor ()+ getC on vertor ()TXTCo nvertor+ tran sform ()圖1類圖在圖1中,ConvertorCreator是抽象工廠接口,它聲明了工廠方法getConvertor(),在其子類中實(shí)現(xiàn)該方法,用于創(chuàng)建具體的轉(zhuǎn)換對(duì)象;Convertor是抽象產(chǎn)品接口,它聲明了抽象數(shù)據(jù)轉(zhuǎn)換方法transform(),在其子類中實(shí)現(xiàn)該方法,用于完成具體的數(shù)據(jù)轉(zhuǎn)換操作。類DBConvertor和TXTConvertor分別用于將數(shù)據(jù)庫中的數(shù)據(jù)和t
6、xt文件中的數(shù)據(jù)轉(zhuǎn)換為XML格式?!綣ava代碼】in terface Con vertorCreator(1;in terface Con vertorpublic String tran sform();class DBCon vertorCreator impleme nts Con vertorCreatorpublic Con vertor getC on vertor() (2);class TXTC on vertorCreator impleme nts Con vertorCreatorpublic Con vertor getC on vertor() (3);class
7、DBCon vertor impleme nts Con vertorpublic String tran sform()/實(shí)現(xiàn)代碼省略class TXTC on vertor impleme nts Con vertorpublic String tran sform()/實(shí)現(xiàn)代碼省略class Testpublic static void main(String args)Con vertorCreator creator;(4);creator = new DBC on vertorCreator();con vertor = (5);con vertor.tra nsform();如果
8、需要針對(duì)一種新的數(shù)據(jù)源進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該系統(tǒng)至少需要增加(6)個(gè)類。工廠方法模式體現(xiàn)了以下哪些面向?qū)ο笤O(shè)計(jì)原則? (7)。(多選)A.開閉原則B.依賴倒轉(zhuǎn)原則C.接口隔離原則D.單一職責(zé)原則 E.合成復(fù)用原則3. 某手機(jī)游戲軟件公司欲推出一款新的游戲軟件,該軟件能夠支持Symbian、An droid和 Win dowsMobile等多個(gè)主流的手機(jī)操作系統(tǒng)平臺(tái),針對(duì)不同的手機(jī)操作系統(tǒng),該游戲軟件提供了不同的游戲操作控 制類和游戲界面控制類,并提供相應(yīng)的工廠類來封裝這些類的初始化。軟件要求具有較好的擴(kuò)展性以支持1所示:新的操作系統(tǒng)平臺(tái),為了滿足上述需求,采用抽象工廠模式進(jìn)行設(shè)計(jì)所得類圖如圖Abst
9、ractFactoryOperati onCon troller75Symbia nFactory+ getOperatio nCon troller () + getl nterfaceC on troller ()An droidFactoryIn terfaceC on trollerSymbia nln terfaceC on troller+ getOperatio nCon troller () + get In terfaceC on troller ()Symbia nO perati onCon trollerAn droidOperati onCon trollerAn d
10、roidl nterfaceC on troller+ getOperatio nCon troller () + get In terfaceC on troller ()圖1類圖在該設(shè)計(jì)方案中,具體工廠類如SymbianFactory用于創(chuàng)建Symbian操作系統(tǒng)平臺(tái)下的游戲操作控制類SymbianOperationController和游戲界面控制類 SymbianlnterfaceController,再通過它們的業(yè)務(wù)方法來實(shí)現(xiàn)對(duì) 游戲軟件的初始化和運(yùn)行控制?!綣ava代碼】in terface AbstractFactorypublic Operati onCon troller g
11、etOperati onCon troller();public In terfaceC on troller get In terfaceC on troller();in terface Operati onCon trollerpublic void in it();其他方法聲明省略in terface In terfaceC on trollerpublic void in it();其他方法聲明省略class Symbia nF actory impleme nts AbstractFactorypublic Operati onCon troller getOperati onCo
12、n troller()(1;public In terfaceC on troller get In terfaceC on troller()(2);class AndroidFactory (3)public Operati onCon troller getOperati onCon troller()return new An droidOperati onCon troller();public In terfaceC on troller get In terfaceC on troller()return new An droidlnterfaceController();cla
13、ss Symbia nOperati onCon troller(4)public void in it() 實(shí)現(xiàn)代碼省略其他方法聲明省略class An droidOperati onCon troller(5)public void in it() 實(shí)現(xiàn)代碼省略其他方法聲明省略class Symbia nln terfaceC on troller impleme nts In terfaceC on troller public void in it() 實(shí)現(xiàn)代碼省略其他方法聲明省略class An droidI nterfaceC on troller impleme nts In t
14、erfaceC on trollerpublic void in it() 實(shí)現(xiàn)代碼省略其他方法聲明省略class Testpublic static void main(String args)AbstractFactory af;(6)oc;Caf = new Symbia nF actory();oc = (8);ic = (9);oc.i nit();ic.ini t();如何需要在上述設(shè)計(jì)方案中增加對(duì)Windows Mobile操作系統(tǒng)的支持,需對(duì)該設(shè)計(jì)方案進(jìn)行哪些調(diào)整,簡單說明實(shí)現(xiàn)過程。4. 某軟件公司欲開發(fā)一個(gè)音頻和視頻播放軟件,為了給用戶使用提供方便,該播放軟件提供了多種界 面
15、顯示模式,如完整模式、精簡模式、記憶模式、網(wǎng)絡(luò)模式等。在不同的顯示模式下主界面的組成元素有 所差異,如在完整模式下將顯示菜單、播放列表、主窗口、控制條等,在精簡模式下只顯示主窗口和控制 條,而在記憶模式下將顯示主窗口、控制條、收藏列表等?,F(xiàn)使用建造者模式設(shè)計(jì)該軟件,所得類圖如圖 所示:MainScreen+ menu+ playList+ mainWindow+ controlBarModeBuilderScreenModeController-mb : ModeBuilder+ setModeBuilder (ModeBuilder mb):void+ construct ():MainSc
16、reenmb嚴(yán)m(xù)b.buildMe nu(); mb.buildPlayList(); mb.buildMai nWin dow(); mb.buildC on trolBar(); return mb.getScree n();abstract# screen : MainScreen = new MainScreen()+ buildMenu ()+ buildPlayList ()+ buildMainWindow ()+ buildControlBar ()+ getScreen ():void:void:void:void:MainScreenFullModeBuilderSimpl
17、eModeBuilder+ buildMenu ():void+ buildPlayList ():void+ buildMainWindow ():void+ buildControlBar():void+buildMenu ():void+buildPlayList ():void+buildMainWindow ():void+buildControlBar():void圖1類圖在該設(shè)計(jì)方案中,Main Scree n是播放器的主界面,它是一個(gè)復(fù)合對(duì)象,包括菜單、播放列表、主窗口 和控制條等成員。ModeBuilder是一個(gè)抽象類,定義了一組抽象方法buildXXX()用于逐步構(gòu)造一個(gè)完
18、整的MainScreen 對(duì)象,getScreen()是工廠方法,用于返回一個(gè)構(gòu)造好的MainScreen 對(duì)象。ScreenModeController充當(dāng)指揮者,用于指導(dǎo)復(fù)合對(duì)象的創(chuàng)建,其中con struct()方法封裝了具體創(chuàng)建流程,并向客戶類返回完整的產(chǎn)品對(duì)象?!綣ava代碼】class Main Scree npublic String menu;public String playList;public String mainWin dow; public String controlBar;(1)class ModeBuilderprotected Main Scree n s
19、cree n = new Main Scree n();public abstract void buildMe nu ();public abstract void buildPlayList。;public abstract void buildMa inWin dow();public abstract void buildC on trolBar();public Main Scree n getScree n() (2) ; class FullModeBuilder exte nds ModeBuilderpublic void buildMe nu() / 實(shí)現(xiàn)代碼省略publi
20、c void buildPlayList() / 實(shí)現(xiàn)代碼省略 public void buildMai nWin dow() / 實(shí)現(xiàn)代碼省略 public void buildC on trolBar() / 實(shí)現(xiàn)代碼省略class SimpleModeBuilder exte nds ModeBuilderpublic void buildMe nu() / 實(shí)現(xiàn)代碼省略public void buildPlayList() / 實(shí)現(xiàn)代碼省略 public void buildMai nWin dow() / 實(shí)現(xiàn)代碼省略 public void buildC on trolBar()
21、/ 實(shí)現(xiàn)代碼省略class Scree nM odeC on trollerprivate ModeBuilder mb;public void setModeBuilder(3)this.mb = mb;public Main Scree n con struct()Main Scree n ms;mb.buildMe nu();mb.buildPlayList();mb.buildMai nWin dow(); mb.buildCo ntrolBar();ms=(4);return ms;class Testpublic static void main(String args)Scree
22、 nM odeC on troller smc =(5)ModeBuilder mb;mb = new FullModeBuilder();構(gòu)造完整模式界面Main Scree n scree n;smc.setModeBuilder(6);scree n = (7);System.out.pri ntln( scree n.menu);/其他代碼省略5. 某數(shù)據(jù)處理軟件需要增加一個(gè)圖表復(fù)制功能,在圖表對(duì)象中包含一個(gè)數(shù)據(jù)集對(duì)象,用于封裝待顯示 的數(shù)據(jù),可以通過界面的“復(fù)制”按鈕將該圖表復(fù)制一份,復(fù)制后可以得到新的圖表對(duì)象,用戶可以修改 新圖表的編號(hào)、顏色和數(shù)據(jù)?,F(xiàn)使用原型模式設(shè)計(jì)該軟件,所得類
23、圖如圖1所示: DataChart-ds: DataSet-color : Color-no : int+ setDataSet (DataSet ds)void+ setColor (Color color)void+ setNo (int no)void+ getDataSet ()DataSet+ getColor ()Color+ getNo ()int+ display ()void+ deepCl one ()Object圖1類圖DataSet 對(duì)在該設(shè)計(jì)方案中,DataChart類包含一個(gè) DataSet對(duì)象,在復(fù)制 DataChart對(duì)象的同時(shí)將復(fù)制象,因此需要使用深克隆技術(shù),
24、可使用流來實(shí)現(xiàn)深克隆。【Java代碼】import java.io.*;class DataSet impleme nts Serializable 具體實(shí)現(xiàn)代碼省略class Color impleme nts Serializable 具體實(shí)現(xiàn)代碼省略class DataChart impleme nts Serializableprivate DataSet ds = new DataSet();private Color color = new Color();private int no;成員屬性的Getter方法和Setter方法省略public void display。具體實(shí)現(xiàn)
25、代碼省略/使用流實(shí)現(xiàn)深克隆,復(fù)制容器的同時(shí)復(fù)制成員public (1deepCIone() throws lOException,ClassNotFoundException,Opti on alDataExcepti on將對(duì)象寫入流中ByteArrayOutputStream bao=new ByteArrayOutputStream();ObjectOutputStream oos=new (2);oos.writeObject(3);將對(duì)象從流中取出ByteArrayl nputStream bis=new ByteArray In putStream(bao.toByteArray(
26、);ObjectlnputStream ois=new (4);return(5);class Testpublic static void main(String args)DataChart chart1,chart2 = null;chartl = new DataChart();trychart2 = (DataChart)chartl.deepClo ne();catch(Excepti on e)e.pri ntStackTrace();System.out.pri ntln( chart1=chart2);System.out.pri ntl n( chart1.getDs()=
27、chart2.getDs();System.out.pri ntl n( chart1.getNo()=chart2.getNo();J編譯并運(yùn)行上述代碼,輸出結(jié)果為:、(8)。在本實(shí)例中,DataChart類和DataSet類需要實(shí)現(xiàn) Serializable接口的原因是 (9)。6. 為了避免監(jiān)控?cái)?shù)據(jù)顯示不一致并節(jié)省系統(tǒng)資源,在某監(jiān)控系統(tǒng)的設(shè)計(jì)方案中提供了一個(gè)主控中心類,該主控中心類使用單例模式進(jìn)行設(shè)計(jì),類圖如圖1所示:Mai nCon trollerCe ntermenu:Me nutb:ToolBarmf:MainFormmcc:Mai nCon trollerCe nter-Main
28、ControllerCenter ()+ini t ():void+load ():void+destroy ():void+getI nsta nee ():Mai nCon trollerCe nter圖1類圖在圖1中,主控中心類 MainControllerCenter是單例類,它包含一系列成員對(duì)象并可以初始化、顯示和銷毀成員對(duì)象,對(duì)應(yīng)的方法分別為ini t()、load()和destroy。,此外還提供了靜態(tài)工廠方法get In sta nce()用于創(chuàng)建MainControllerCenter類型的單例對(duì)象。【Java代碼】class MainCon trollerCe nterpr
29、ivate Me nu me nu;主控中心菜單private ToolBar tb;/主控中心工具欄private Mai nF orm mf;主控中心主窗口private (1)Ma inCon trollerCe nter mcc;(2)Mai nCon trollerCe nterpublic void in it()menu = new Menu();tb = new ToolBar(); mf = new MainForm();public void load()menu .display。;tb.display(); mf.display();public void destro
30、y()menu .destroy。;tb.destroy();mf.destroy();public static MainCon trollerCe nter get In sta nce()if(mcc=n ull)(3);return mcc;class Testpublic static void main(String args)MainCon trollerCe nter mcc1,mcc2;mcc1 = MainCon trollerCe nter.getl nsta nce();mcc2 = MainCon trollerCe nter.getl nsta nce();System.out
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國紅外強(qiáng)力按摩錘數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國紫檀木雕螭紋魚桌數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度汽車美容店汽車美容店員工福利待遇合同
- 2025年度物業(yè)賠償業(yè)主綠化損壞的補(bǔ)償協(xié)議書
- 二零二五年度股東分紅協(xié)議書模板(獨(dú)資企業(yè))
- 二零二五年度政府機(jī)關(guān)文員臨時(shí)聘用合同書
- 2025至2030年中國空調(diào)專用低收縮套管料數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年度電商平臺(tái)數(shù)據(jù)分析與應(yīng)用合作協(xié)議
- 白條采購合同范本
- 科技助力下的老年人營養(yǎng)管理與健康教育
- 江蘇2025年01月江蘇省揚(yáng)州生態(tài)科技新城管委會(huì)2025年招考6名勞務(wù)派遣人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2024年湖南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(頻考版)含答案解析
- 2024年湖南外貿(mào)職業(yè)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫及答案解析
- 中國兒童幽門螺桿菌感染診治專家共識(shí)2022
- 山東職業(yè)學(xué)院單招《語文》考試復(fù)習(xí)題庫(含答案)
- 民政局離婚協(xié)議書模板(4篇)
- 導(dǎo)數(shù)應(yīng)用舉例
- 第三講文獻(xiàn)的形成與流布1
- 配煤配礦管理辦法
- ISO14001風(fēng)險(xiǎn)和機(jī)遇評(píng)估分析報(bào)告
- 什么是場(chǎng)(廠)內(nèi)專用機(jī)動(dòng)車輛重點(diǎn)講義
評(píng)論
0/150
提交評(píng)論