版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、S.設(shè)計(jì)模式偉實(shí)驗(yàn)參考答案實(shí)驗(yàn)11在某圖形庫API中提供了多種矢量圖模板,用戶可以基于這些矢量圖創(chuàng)建不同的顯示圖形,圖形庫設(shè)計(jì)人員設(shè)計(jì)的初始類圖如下所示:Circle+init():void+setColor():void+fill():void+setSize():void+display():voidTrangle+init()+setCc+fill()+setSi:+displc:void)lor():void:voidze():voidiy():voidRectangle+init():void+setColor():void+fill():void+setSize():void+di
2、splay():void在該圖形庫中,每個(gè)圖形類如Circle、Triangle等)的init()方法用于初始化所創(chuàng)建Client的圖形,setColor()方法用于給圖形設(shè)置邊框顏色,fill()方法用于給圖形設(shè)置填充顏色,setSize()方法用于設(shè)置圖形的大小,display()方法用于顯示圖形??蛻纛?Client)在使用該圖形庫時(shí)發(fā)現(xiàn)存在如下問題:由于在創(chuàng)建窗口時(shí)每次只需要使用圖形庫中的一種圖形,因此在更換圖形時(shí)需要修改客戶類源代碼;在圖形庫中增加并使用新的圖形時(shí)需要修改客戶類源代碼;客戶類在每次使用圖形對(duì)象之前需要先創(chuàng)建圖形對(duì)象,有些圖形的創(chuàng)建過程較為復(fù)雜,導(dǎo)致客戶類代碼冗長且難以
3、維護(hù)?,F(xiàn)需要根據(jù)面向?qū)ο笤O(shè)計(jì)原則對(duì)該系統(tǒng)進(jìn)行重構(gòu),要求如下:隔離圖形的創(chuàng)建和使用,將圖形的創(chuàng)建過程封裝在專門的類中,客戶類在使用圖形時(shí)無須直接創(chuàng)建圖形對(duì)象,甚至不需要關(guān)心具體圖形類類名;客戶類能夠方便地更換圖形或使用新增圖形,無須針對(duì)具體圖形類編程,符合開閉原則。繪制重構(gòu)之后的類圖并說明在重構(gòu)過程中所運(yùn)用的面向?qū)ο笤O(shè)計(jì)原則參考答案:Crealor+hltO;void+create():ShapeZSE礦i,.corifigjtfdlGircleCreato4init():void+create):ShapeClieniTriangleCrealor+inif0:YOki+create):Sha
4、peCircleTriangle+setColor():void+fill):void+setSize():void+display(:void+setColar:void+劃1心:void+setSce():void+display):void526Shape+setColor()void+fill:void&setSize():void+displayHvoid2、使用簡單工廠模式設(shè)計(jì)一個(gè)可以創(chuàng)建不同幾何形狀(Shape),如圓形(Circle)、矩形(Rectangle)和三角形仃riangle)等的繪圖工具類,毎個(gè)幾何圖形均具有繪制draw()和擦除erase()兩個(gè)方法,要求在繪制不
5、支持的幾何圖形時(shí),拋出一個(gè)UnsupportedShapeException異常,繪制類圖并編程模擬實(shí)現(xiàn)。參考答案:現(xiàn)需要設(shè)計(jì)一個(gè)程序來讀取多種不同類型的圖片格式,針對(duì)毎一種圖片格式都設(shè)計(jì)一個(gè)圖片讀取器(ImageReader),如GIF圖片讀取器(GifReader)用于讀取GIF格式的圖片、JPG圖片讀取器(JpgReader)用于讀取JPG格式的圖片。圖片讀取器對(duì)象通過圖片讀取器工廠ImageReaderFactory來創(chuàng)建,ImageReaderFactory是一個(gè)抽象類,用于定義創(chuàng)建圖片讀取器的工廠方法,其子類GifReaderFactory和JpgReaderFactory用于創(chuàng)建
6、具體的圖片讀取器對(duì)象。試使用工廠方法模式設(shè)計(jì)該程序,繪制類圖并編程模擬實(shí)現(xiàn)。需充分考慮系統(tǒng)的靈活性和可擴(kuò)展性。某軟件公司欲開發(fā)一套界面皮膚庫,可以對(duì)桌面軟件進(jìn)行界面美化。不同的皮膚將提供視覺效果不同的按鈕、文本框、組合框等界面元素,其結(jié)構(gòu)如下圖所示:該皮膚庫需要具備良好的靈活性和可擴(kuò)展性,用戶可以自由選擇不同的皮膚,開發(fā)人員可以在不修改既有代碼的基礎(chǔ)上增加新的皮膚。試使用抽象工廠模式設(shè)計(jì)該皮膚庫,繪制類圖并編程模擬實(shí)現(xiàn)。參考答案:+c/ealeHutwn()!Bultcrn+cfRaleTextFlEld0:larfF誕Id+口日CorrbcB&K():CcmbdBaxbClleni11Spr
7、ingSknFactoiySumcncrSkinFiaGtary*create&jltQn();Button-craalf:!riFiridl():TMaiarrk111pl1!lm申IJ“護(hù)仲忖A刊IIb1tj1+11YiSpmngEjulIcniSunmerQAjfbaniSp*ingTsjdlFieldSummefTejctFiEtaSprlngCmtxffioicSufflmfipCimbcjaflxIII1+display():void+(:vorid+displayQ:void卜displayf):void4dis,pl():void4display):vddFBulLoii+di
8、dplsy()-gidCdiiibuBoM.*diapl0:vdd使用單例模式的思想實(shí)現(xiàn)多例模式,確保系統(tǒng)中某個(gè)類的對(duì)象只能存在有限個(gè),例如兩個(gè)或三個(gè),設(shè)計(jì)并編寫代碼實(shí)現(xiàn)一個(gè)多例類。參考答案:Multiton-array:Multiton-Multiton()+getinstance():Multiton+random():int多例模式(MultitonPattern)是單例模式的一種擴(kuò)展形式,多例類可以有多個(gè)實(shí)例,而且必須自行創(chuàng)建和管理實(shí)例,并向外界提供自己的實(shí)例,可以通過靜態(tài)集合對(duì)象來存儲(chǔ)這些實(shí)例。多例類Multiton的代碼如下所示:importjava.utiI.*;publiccl
9、assMultiton定義一個(gè)數(shù)組用于存儲(chǔ)四個(gè)實(shí)例privatestaticMultitonarray=newMultiton(),newMultiton(),newMultiton(),newMultiton();私有構(gòu)造函數(shù)privateMultiton()靜態(tài)工廠方法,隨機(jī)返回?cái)?shù)組中的一個(gè)實(shí)例publicstaticMultitongetInstance()returnarrayrandom();隨機(jī)生成一個(gè)整數(shù)作為數(shù)組下標(biāo)publicstaticintrandom。Dated=newDate();Randomrandom=newRandom。;intvalue=Math.abs(ran
10、dom.nextInt();value=value%4;returnvalue;publicstaticvoidmain(Stringargs)Multitonm1,m2,m3,m4;ml=Multiton.getinstance();m2=Multiton.getinstance();m3=Multiton.getinstance();m4=Multiton.getinstance();System.out.println(m1=m2);System.out.println(m1=m3);System.out.println(m1=m4);6.使用單例模式設(shè)計(jì)一個(gè)多文檔窗口(注:在JavaA
11、WT/Swing開發(fā)中可使用JDesktopPane和JinternalFrame來實(shí)現(xiàn)丿,要求在主窗體中某個(gè)部子窗體只能實(shí)例化一次,即只能彈出一個(gè)相同的子窗體,如下圖所示,編程實(shí)現(xiàn)該功能。(注:用C#或C+實(shí)現(xiàn)類似功能也可以丿參考答案:SubFrame類充當(dāng)單例類,在其中定義了靜態(tài)工廠方法getFrame。代碼如下所示:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjavax.swing.event.*;子窗口:單例類classSubFrameextendsJInternalFrameprivatestat
12、icSubFrameframe;/靜態(tài)實(shí)例私有構(gòu)造函數(shù)privateSubFrame()super(子窗體,true,true,true,false);this.setLocation(20,20);設(shè)置部窗體位置this.setSize(200,200);設(shè)置部窗體大小this.addInternalFrameListener(newMyIFListener();監(jiān)聽窗體事件this.setVisible(true);工廠方法,返回窗體實(shí)例publicstaticSubFramegetFrame()如果窗體對(duì)象為空,則創(chuàng)建窗體,否則直接返回已有窗體訐(frame=null)frame=new
13、SubFrame();returnframe;事件監(jiān)聽器classMyIFListenerextendsInternalFrameAdapter子窗體關(guān)閉時(shí),將窗體對(duì)象設(shè)為nullpublicvoidinternaIFrameCIosing(InternalFrameEvente)訐(frame!=null)frame=null;客戶端測(cè)試類classMainCIassextendsJFrameprivateJButtonbutton;privateJDesktopPanedesktopPane;privateSubFrameiFrame=null;publicMainClass()super
14、(主窗體);Containerc=this.getContentPane();c.setLayout(newBorderLayout();button=newJButton(點(diǎn)擊創(chuàng)建一個(gè)部窗體);button.addActionListener(newBtListener();c.add(button,BorderLayout.SOUTH);desktopPane=newJDesktopPane();創(chuàng)建DesktopPanec.add(desktopPane);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocati
15、onRelativeTo(null);this.setSize(400,400);this.show();事件監(jiān)聽器classBtListenerimplementsActionListenerpublicvoiddesktopPane.remove(iFrame);iFrame=SubFrame.getFrame();desktopPane.add(iFrame);publicstaticvoidmain(Stringargs)newMainCIass();SubFrame類是JInternalFrame類的子類,在SubFrame類中定義了一個(gè)靜態(tài)的SubFrame類型的實(shí)例變量,在靜態(tài)工
16、廠方法getFrame()中創(chuàng)建了SubFrame對(duì)象并將其返回。在MainClass類中使用了該單例類,確保子窗口在當(dāng)前應(yīng)用程序中只有唯一一個(gè)實(shí)例,即只能彈出一個(gè)子窗口。實(shí)驗(yàn)2現(xiàn)有一個(gè)接口DataOperation定義了排序方法sort(int)和查找方法search(int,int),已知類QuickSort的quickSort(int)方法實(shí)現(xiàn)了快速排序算法,類BinarySearch的binarySearch(int,int)方法實(shí)現(xiàn)了二分查找算法。試使用適配器模式設(shè)計(jì)一個(gè)系統(tǒng),在不修改源代碼的情況下將類QuickSort和類BinarySearch的方法適配到DataOperatio
17、n接口中。繪制類圖并編程實(shí)現(xiàn)。(要現(xiàn)快速排序和二分查找,使用對(duì)象適配器實(shí)現(xiàn))參考答案:Client-DataOperation+sort(intarray+search(intarr1):intay,intkey):intQuicksortOperateonAdaptersortObj:QuickScsearchObj:BinarySrtsarch+OperationAdapter(QuicksortsortObj,BinarySearchsearchObj)+sort(intarray):int+search(intarray,intkey):intquicksort(intarray)so
18、rt(intarraypartition(intaswap(inta,ir:intintp,intr):void,intp,intr):intti,intj):voidBinarySearch+binarySearch(intarray,intkey):int2.WindowsMediaPlayer和RealPlayer是兩種常用的媒體播放器,它們的API結(jié)構(gòu)和調(diào)用方法存在區(qū)別?,F(xiàn)在你的應(yīng)用程序需要支持這兩種播放器API,而且在將來可能還需要支持新的媒體播放器,請(qǐng)問如何設(shè)計(jì)該應(yīng)用程序?繪制類圖并編程模擬實(shí)現(xiàn)。參考答案:可使用適配器模式和抽象工廠模式,參考類圖如下所示:ClientClassPl
19、ayerFactory+createMainWindo+createPlayerListiw():MainWindow)1:PlayerListMainWWindow1MediaPlayerFactoryMediaPlayerWindow+createMainWindow():MainWindow+createPlayerList().:PlayerListRealPlayerWindowRealPlayerFac:oryMedial“ayerAPIRealPlaiyerAPI+createMainWindow():+createPlayerList():MainWindowPlayerLis
20、tPlayerlist1MediaPllayerListRealPlayerlist在該類圖中,為兩種不同的播放器提供了兩個(gè)具體工廠類MediaPIayerFactory和RealPIayerFactory,其中MediaPlayerFactory作為WindowsMediaPlayer播放器工廠,可以創(chuàng)建WindowsMediaPlayer的主窗口(MediaPlayerWindow)和播放列表(MediaPlayerList)(為了簡化類圖,只列出主窗口和播放列表這兩個(gè)播放器組成元素,實(shí)際情況下包含更多組成元素);ReaIPIayerFactory作為ReaIPIayer播放器工廠,創(chuàng)建R
21、eaIPIayer的主窗口(RealPlayerWindow)和播放列表(RealPlayerList),此時(shí)可以使用抽象工廠模式,客戶端針對(duì)抽象工廠PIayerFactory編程,如果增加新的播放器,只需增加一個(gè)新的具體工廠來生產(chǎn)新產(chǎn)品族中的產(chǎn)品即可。由于需要調(diào)用現(xiàn)有API中的方法,因此還需要使用適配器模式,在具體產(chǎn)品類如MediaPlayerWindow和MediaPlayerList調(diào)用WindowsMediaPlayerAPI中的方法,在ReaIPIayerWindow和ReaIPIayerList中調(diào)用ReaIPIayerAPI中的方法,實(shí)現(xiàn)對(duì)API中方法的適配,此時(shí)具體產(chǎn)品如Med
22、iaPlayerWindow、RealPlayerWindow等充當(dāng)適配器,而已有的API如MediaPIayerAPI和RealPIayerAPI是需要適配的適配者。使用組合模式設(shè)計(jì)一個(gè)殺毒軟件(AntiVirus)的框架,該軟件既可以對(duì)某個(gè)文件夾(Folder)殺毒,也可以對(duì)某個(gè)指定的文件(File)進(jìn)行殺毒,文件種類包括文本文件TextFile、圖片文件ImageFile、視頻文件VideoFile。繪制類圖并編程模擬實(shí)現(xiàn)。參考答案:AbstractFileabstractadd(AbstractFilefile):voidremove(AbstractFilefile):void+ge
23、tChild(ipti):AbstractFilefileLstImaceEileVideoFile-name:String+ImageFile(Stringname)+add(AbstractFilefile):void+remove(AbstractFilefile):void+getChild(inti):AbstractFile+_killVirus():void-name:String+VideoFile(Stringname)+add(AbstractFilefile):void+remove(AbstractFilefile):void+getChild(inti):Abstra
24、ctFile+_killVirus():voidFolderfileList:name:ArrayListString卜Folder(Stringname)卜add(AbstractFilefile):卜remove(AbstractFilefile):卜getChild(inti):卜killVirus():voidvoidAbstractFile-void+killVirus()!:void;TextFilename:StringTextFile(Stringname)add(AbstractFilefile):voidremove(AbstractFilefile):voidgetChi
25、ld(inti):AbstractFilekillVirus():void某教育機(jī)構(gòu)組織結(jié)構(gòu)如下圖所示:北京總部1教務(wù)辦公室1湖南分校行政辦公室室長沙教學(xué)點(diǎn)教務(wù)辦公室I行政辦公室教務(wù)辦公室行政辦公室教務(wù)辦公室I行政辦公室在該教育機(jī)構(gòu)的OA系統(tǒng)中可以給各級(jí)辦公室下發(fā)公文,試采用組合模式設(shè)計(jì)該機(jī)構(gòu)的組織結(jié)構(gòu),繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn),在客戶端代碼中模擬下發(fā)公文。參考答案:參考類圖如下所示:OfficeInstitution-name:String-list:ArrayListlist卜Office(Stringname)-name:String卜handleArchives():void+In
26、stitution(Stringname)+add(Unitunit):void+handleArchives():void+handlgArchiVes():void本實(shí)例使用了安全組合模式,Unit充當(dāng)抽象構(gòu)件角色,Office充當(dāng)葉子構(gòu)件角色,Institution充當(dāng)容器構(gòu)件角色。本實(shí)例代碼如下所示:Unitabstract+handleArchi/es():voidabstractclassUnitpublicabstractvoidhandIeArchives();classOfficeextendsUnitprivateStringname;publicOfficetringna
27、me)=name;publicvoidhandleArchives()System.out.println(+處理公文!);classInstitutionextendsUnitprivateArrayListlist=newArrayList();privateStringname;publicInstitution(Stringname)=name;publicvoidadd(Unitunit)list.add(unit);publicvoidhandleArchives()System.out.println(+接收
28、并下發(fā)公文:);for(Objectobj:list)(Unit)obj).handleArchives();在客戶類中創(chuàng)建樹形結(jié)構(gòu),代碼如下所示:classClientpublicstaticvoidmain(Stringargs)InstitutionbjHeadquarters,hnSubSchooI,csTeachingPost,xtTeachingPost;UnittOffice1,tOffice2,tOffice3,tOffice4,aOffice1,aOffice2,aOffice3,aOffice4;bjHeadquarters=newInstitution(總部);hnSub
29、School=newInstitution(分校);csTeachingPost=newInstitution(教學(xué)點(diǎn));xtTeachingPost=newInstitution(教學(xué)點(diǎn));tOffice1=newOffice(教務(wù)辦公室);tOffice2=newOffice(教務(wù)辦公室);tOffice3=newOffice(教務(wù)辦公室);tOffice4=newOffice(教務(wù)辦公室);aOffice1=newOffice(行政辦公室);aOffice2=newOffice(行政辦公室);aOffice3=newOffice(行政辦公室);aOffice4=newOffice(行政辦
30、公室);csTeachingPost.add(tOffice3);csTeachingPost.add(aOffice3);xtTeachingPost.add(tOffice4);xtTeachingPost.add(aOffice4);hnSubSchool.add(csTeachingPost);hnSubSchool.add(xtTeachingPost);hnSubSchool.add(tOffice2);hnSubSchool.add(aOffice2);bjHeadquarters.add(hnSubSchool);bjHeadquarters.add(tOffice1);bjH
31、eadquarters.add(aOffice1);bjHeadquarters.handleArchives();注:本題也可以將員工(Employee)作為葉子構(gòu)件,將Unit作為容器構(gòu)件。某軟件公司為新開發(fā)的智能手機(jī)控制與管理軟件提供了一鍵備份功能,通過該功能可以將原本存儲(chǔ)在手機(jī)中的通信錄、短信、照片、歌曲等資料一次性全部拷貝到移動(dòng)存儲(chǔ)介質(zhì)(例如MMC卡或SD卡)中。在實(shí)現(xiàn)過程中需要與多個(gè)已有的類進(jìn)行交互,例如通訊錄管理類、短信管理類等,為了降低系統(tǒng)的耦合度,試使用外觀模式來設(shè)計(jì)并編程模擬實(shí)現(xiàn)該一鍵備份功能。參考答案:參考類圖如下所示:OneKeyBackupcm:ContactMana
32、germm:MessageManagerfm:FileManager+click():void7ContactManager+backup():voidMessageManager+backup():void+backup():voidFileManager其中,OneKeyBackup充當(dāng)外觀角色,ContactManager、MessageManager和FileManager充當(dāng)子系統(tǒng)角色。某信息系統(tǒng)需要提供一個(gè)數(shù)據(jù)處理和報(bào)表顯示模塊,該模塊可以讀取不同類型的文件中的數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)換成XML格式,然后對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,最后以報(bào)表方式來顯示數(shù)據(jù)。由于該過程需要涉及到多個(gè)類,試使用外觀模式
33、設(shè)計(jì)該數(shù)據(jù)處理和報(bào)表顯示模塊??紤]到有些文件本身已經(jīng)是XML格式,無須進(jìn)行格式轉(zhuǎn)換,為了讓系統(tǒng)具有更好的擴(kuò)展性,在系統(tǒng)設(shè)計(jì)中可以引入抽象外觀類。參考答案:+executeAbstractFacadeabstractXMLFacade+execute()lExtendedFacade+execute()/P2,盈”|FileOperationXMLDataConvertor卜VDataAnalysis0ReportDisplay+read()+convert()+handle()+display()實(shí)驗(yàn)31.在某應(yīng)用軟件中需要記錄業(yè)務(wù)方法的調(diào)用日志,在不修改現(xiàn)有業(yè)務(wù)類的基礎(chǔ)上為毎一個(gè)類提供一個(gè)日
34、志記錄代理類,在代理類中輸出日志,例如在業(yè)務(wù)方法method()調(diào)用之前輸出“方法method()被調(diào)用,調(diào)用時(shí)間為2014-11-510:10:10”,調(diào)用之后如果沒有拋異常則輸出“方法method()調(diào)用成功”,否則輸出“方法method()調(diào)用失敗”。在代理類中調(diào)用真實(shí)業(yè)務(wù)類的業(yè)務(wù)方法,使用代理模式設(shè)計(jì)該日志記錄模塊的結(jié)構(gòu),繪制類圖并編程模擬實(shí)現(xiàn)。參考答案:ClientAbstractLog+method():voidLog(gerProxy-business:BusnessClass卜LoggerProxy()卜method():voidBusinessClass+method():v
35、oid某軟件公司承接了某信息咨詢公司的收費(fèi)商務(wù)信息查詢系統(tǒng)的開發(fā)任務(wù),該系統(tǒng)的基本需求如下:(1)在進(jìn)行商務(wù)信息查詢之前用戶需要通過身份驗(yàn)證,只有合法用戶才能夠使用該查詢系統(tǒng);(2)在進(jìn)行商務(wù)信息查詢時(shí)系統(tǒng)需要記錄查詢?nèi)罩?,以便根?jù)查詢次數(shù)收取查詢費(fèi)用。該軟件公司開發(fā)人員已完成了商務(wù)信息查詢模塊的開發(fā)任務(wù),現(xiàn)希望能夠以一種松耦合的方式向原有系統(tǒng)增加身份驗(yàn)證和日志記錄功能,客戶端代碼可以無區(qū)別地對(duì)待原始的商務(wù)信息查詢模塊和增加新功能之后的商務(wù)信息查詢模塊,而且可能在將來還要在該信息查詢模塊中增加一些新的功能。試使用代理模式設(shè)計(jì)并編程模擬實(shí)現(xiàn)該收費(fèi)商務(wù)信息查詢系統(tǒng)。【提示:使用保護(hù)代理和智能引用代
36、理】參考答案:Searcher+doSeircli():String7FProxySearchersearcher:Reavalidator:Acclogger:LogilSearcheressValidatorger卜doSearch():String卜validate():boolean卜log()i:void|iRealSearcher+doSearch():StringiAccessValidatcrqLogger+validate():boolean+log():void3.某企業(yè)的SCM(SuppIyChainManagement,供應(yīng)鏈管理)系統(tǒng)中包含一個(gè)采購審批子系統(tǒng)。該企業(yè)的
37、采購審批是分級(jí)進(jìn)行的,即根據(jù)采購金額的不同由不同層次的主管人員來審批,主任可以審批5萬元以下(不包括5萬元丿的采購單,副董事長可以審批5萬元至10萬元(不包括10萬元丿的采購單,董事長可以審批10萬元至50萬元(不包括50萬元丿的采購單,50萬元及以上的采購單就需要開董事會(huì)討論決定。如下圖所示:采購人員主任副繭事長茁事長革書會(huì)試便用職責(zé)鏈模式設(shè)計(jì)井實(shí)現(xiàn)該.系統(tǒng)參考答案:+PurchaseRequestamount:doublenumber:intpurpose:StringPurchaseRequest(doubleamountintnumber,Stringpurpose)setAmount
38、(doubleamount)getAmount()setNumber(intnumber)getNumber()setPurpose(Stringpurpose)getPurpose()ApproverabstractvoiddoublevoidintvoidStringsuccessor:Approvername:String+Approver(Stringname)+setSuccessor(Approver.successor)processRequest(PurdhAseReq:voiduestrequest):voidsuccessorDirectorxju1ly1+Congress
39、(Stringname)+processRequest(PurchaseRequestrequest):voidViceriesideni卜VicePresident(Stringname)iprocessRequest(PurchaseRequestrequest):void卜President(Stringname)iprocessRequest(PurchaseRequestrequest):void+Director(Stringname)+processRequest(PurchaseRequestrequest):void某公司欲開發(fā)一個(gè)軟件系統(tǒng)的在線文檔幫助系統(tǒng),用戶可以在任何一
40、個(gè)查詢上下文中輸入查詢關(guān)鍵字,如果當(dāng)前查詢環(huán)境下沒有相關(guān)容,則系統(tǒng)會(huì)將查詢按照一定的順序轉(zhuǎn)發(fā)給其他查詢環(huán)境?;谏鲜鲂枨?,試采用職責(zé)鏈模式對(duì)該系統(tǒng)進(jìn)行設(shè)計(jì)。參考答案:房間中的開關(guān)就是命令模式的一個(gè)實(shí)例,現(xiàn)用命令模式來模擬開關(guān)的功能,可控制對(duì)象包括電燈和電風(fēng)扇,繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn)。參考答案:參考類圖如下所示:Command+executeOn():void+execut.eOff.():voidlampCommand-lamp:Lamp+executeOn():void卜executeOff():voidlampLamp+lighten():void+quench():voidFanC
41、ommandfan:FanexecuteOn():voidfanFan+run():void+stop():void其中,Switch充當(dāng)調(diào)用者(發(fā)送者)角色,Command是抽象命令類,LampCommand和FanCommand充當(dāng)具體命令角色,Lamp和Fan充當(dāng)接收者角色。6.某軟件公司欲開發(fā)一個(gè)基于Windows平臺(tái)的公告板系統(tǒng)。系統(tǒng)提供一個(gè)主菜單(Menu),在主菜單中包含了一些菜單項(xiàng)(MenuItem),可以通過Menu類的addMenuItem()方法增加菜單項(xiàng)。菜單項(xiàng)的主要方法是click(),毎一個(gè)菜單項(xiàng)包含一個(gè)抽象命令類,具體命令類包括OpenCommand(打開命令),
42、CreateCommand(新建命令),EditCommand(編輯命令)等,命令類具有一個(gè)execute()方法,用于調(diào)用公告板系統(tǒng)界面類(BoardScreen)的open()、create()、edit()等方法?,F(xiàn)使用命令模式設(shè)計(jì)該系統(tǒng),使得MenuItem類與BoardScreen類的耦合度降低,繪制類圖并編程實(shí)現(xiàn)。參考答案:*BoardScreen-menu:Menu+BoardScreen()+display():void+open():void+create():void+edt():void+execute():voidOpenCommand-screen:BoardScre
43、en+OpenCommand(BoardScreenscreen)+execute():voidEditCommand-screen:BoardScreen+EditCommand(BoardScreenscreen)+execute():voidMenu+itemList:ArrayList+addMenultem(Menuitemitem):voidMenuitemname:Stringcommand:Command+Menuitem(Stringname)+getName():String+setName(Stringname):void+getCommand():Command+set
44、Command(Commandcommand):void+click():voidCommandCreateCommandscreen:BoardScreen+CreateCommand(BoardScreenscreen)卜execute():void其中,BoardScreen充當(dāng)接收者角色,MenuItem充當(dāng)調(diào)用者角色,Command充當(dāng)抽象命令角色,OpenCommand、CreateCommand和EditCommand充當(dāng)具體命令角色。實(shí)驗(yàn)4某實(shí)時(shí)在線股票軟件需要提供如下功能:當(dāng)股票購買者所購買的某支股票價(jià)格變化幅度達(dá)到5%時(shí),系統(tǒng)將自動(dòng)發(fā)送通知(包括新價(jià)格)給購買該股票的所有股
45、民。試使用觀察者模式設(shè)計(jì)并實(shí)現(xiàn)該系統(tǒng),要求繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn)。參考答案:Stockinvestors:ArrayListstockName:Stringprice:double+Stock(StringstockName,doubleprice)+attach(investorinvestor):void+detach(investorinvestor):void+setStockName(StringstockName):void+getStockName():String+setPrice(doubleprice):void+getPrice():double+notifylnvestor():voidConcreteinvestor-name:String+Concreteinvestor(Stringname)+response(Stockstock):voidinvestorinvestors+response(Stbckstock):void某公司欲開發(fā)一套機(jī)房監(jiān)控系統(tǒng),如果機(jī)房達(dá)到某一指定溫度,溫度傳感器仃hermosensor)將自動(dòng)傳遞信號(hào)給各種響應(yīng)設(shè)備,例如警示燈(CautionLight)將閃爍(flicker()、報(bào)警器(Annunciator)將發(fā)出警報(bào)(alarm()、安全逃生門(SecurityDoor)將自動(dòng)開啟(open()、隔熱門(I
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒樓消防知識(shí)培訓(xùn)課件
- 2024燃料油產(chǎn)業(yè)技術(shù)創(chuàng)新戰(zhàn)略聯(lián)盟合作協(xié)議3篇
- 2024樣板房樣板間智能化改造升級(jí)合同3篇
- 2024數(shù)碼相機(jī)產(chǎn)品研發(fā)與全球市場(chǎng)推廣合同3篇
- 2024架子工班組項(xiàng)目承包協(xié)議樣本版B版
- 中國礦業(yè)大學(xué)徐海學(xué)院《微生物學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長沙職業(yè)技術(shù)學(xué)院《項(xiàng)目投資與融資》2023-2024學(xué)年第一學(xué)期期末試卷
- 腫瘤登記知識(shí)培訓(xùn)課件
- 教育培訓(xùn)行業(yè)安全事故案例分析
- 鐘表設(shè)計(jì)師職位概述
- 酒店行業(yè)pest模型分析
- 汽車經(jīng)營計(jì)劃書
- 2024屆山東省濱州無棣縣聯(lián)考物理九上期末綜合測(cè)試試題含解析
- 兩高環(huán)境污染罪司法解釋解讀
- 部編版小學(xué)六年級(jí)語文上冊(cè)第六單元集體備課記錄表
- 手機(jī)繳費(fèi)收款授權(quán)委托書
- 財(cái)務(wù)情況說明書
- 無人值守汽車衡解決方案
- 動(dòng)脈瘤介入術(shù)后護(hù)理查房課件
- 淄博市張店區(qū)預(yù)防接種工作現(xiàn)狀及其影響因素分析中期報(bào)告
- 初中英語2023年中考專題訓(xùn)練任務(wù)型閱讀-完成表格篇
評(píng)論
0/150
提交評(píng)論