中南大學(xué)軟件體系結(jié)構(gòu)實(shí)驗(yàn)五_第1頁(yè)
中南大學(xué)軟件體系結(jié)構(gòu)實(shí)驗(yàn)五_第2頁(yè)
中南大學(xué)軟件體系結(jié)構(gòu)實(shí)驗(yàn)五_第3頁(yè)
中南大學(xué)軟件體系結(jié)構(gòu)實(shí)驗(yàn)五_第4頁(yè)
中南大學(xué)軟件體系結(jié)構(gòu)實(shí)驗(yàn)五_第5頁(yè)
已閱讀5頁(yè),還剩20頁(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、軟件體系結(jié)構(gòu)實(shí)驗(yàn)報(bào)告項(xiàng)目名稱 結(jié)構(gòu)型和行為型設(shè)計(jì)模式實(shí)驗(yàn) 專業(yè)班級(jí) 軟件工程1203 學(xué) 號(hào) 姓 名 實(shí)驗(yàn)成績(jī):批閱教師:2014年 12月 24 日25實(shí)驗(yàn)5 結(jié)構(gòu)型和行為型設(shè)計(jì)模式實(shí)驗(yàn)實(shí)驗(yàn)學(xué)時(shí): 2 每組人數(shù): 1 實(shí)驗(yàn)類型: 3 (1:基礎(chǔ)性 2:綜合性 3:設(shè)計(jì)性 4:研究性)實(shí)驗(yàn)要求: 1 (1:必修 2:選修 3:其它)實(shí)驗(yàn)類別: 3 (1:基礎(chǔ) 2:專業(yè)基礎(chǔ) 3:專業(yè) 4:其它)一、實(shí)驗(yàn)?zāi)康氖炀毷褂肞owerDesigner和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)幾種常見(jiàn)的結(jié)構(gòu)型和行為型設(shè)計(jì)模式,包括代理模式、職責(zé)鏈模式和命令模式,理解每一種設(shè)計(jì)模式的模式動(dòng)機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代

2、碼實(shí)現(xiàn)這些模式。二、實(shí)驗(yàn)內(nèi)容1. 在某應(yīng)用軟件中需要記錄業(yè)務(wù)方法的調(diào)用日志,在不修改現(xiàn)有業(yè)務(wù)類的基礎(chǔ)上為每一個(gè)類提供一個(gè)日志記錄代理類,在代理類中輸出日志,例如在業(yè)務(wù)方法method()調(diào)用之前輸出“方法method()被調(diào)用,調(diào)用時(shí)間為2014-11-5 10:10:10”,調(diào)用之后如果沒(méi)有拋異常則輸出“方法method()調(diào)用成功”,否則輸出“方法method()調(diào)用失敗”。在代理類中調(diào)用真實(shí)業(yè)務(wù)類的業(yè)務(wù)方法,使用代理模式設(shè)計(jì)該日志記錄模塊的結(jié)構(gòu),繪制類軟圖并編程模擬實(shí)現(xiàn)。2. 某軟件公司承接了某信息咨詢公司的收費(fèi)商務(wù)信息查詢系統(tǒng)的開(kāi)發(fā)任務(wù),該系統(tǒng)的基本需求如下:(1) 在進(jìn)行商務(wù)信息查詢

3、之前用戶需要通過(guò)身份驗(yàn)證,只有合法用戶才能夠使用該查詢系統(tǒng);(2) 在進(jìn)行商務(wù)信息查詢時(shí)系統(tǒng)需要記錄查詢?nèi)罩?,以便根?jù)查詢次數(shù)收取查詢費(fèi)用。該軟件公司開(kāi)發(fā)人員已完成了商務(wù)信息查詢模塊的開(kāi)發(fā)任務(wù),現(xiàn)希望能夠以一種松耦合的方式向原有系統(tǒng)增加身份驗(yàn)證和日志記錄功能,客戶端代碼可以無(wú)區(qū)別地對(duì)待原始的商務(wù)信息查詢模塊和增加新功能之后的商務(wù)信息查詢模塊,而且可能在將來(lái)還要在該信息查詢模塊中增加一些新的功能。試使用代理模式設(shè)計(jì)并編程模擬實(shí)現(xiàn)該收費(fèi)商務(wù)信息查詢系統(tǒng)。【提示:使用保護(hù)代理和智能引用代理】3. 某企業(yè)的SCM(Supply Chain Management,供應(yīng)鏈管理)系統(tǒng)中包含一個(gè)采購(gòu)審批子系統(tǒng)

4、。該企業(yè)的采購(gòu)審批是分級(jí)進(jìn)行的,即根據(jù)采購(gòu)金額的不同由不同層次的主管人員來(lái)審批,主任可以審批5萬(wàn)元以下(不包括5萬(wàn)元)的采購(gòu)單,副董事長(zhǎng)可以審批5萬(wàn)元至10萬(wàn)元(不包括10萬(wàn)元)的采購(gòu)單,董事長(zhǎng)可以審批10萬(wàn)元至50萬(wàn)元(不包括50萬(wàn)元)的采購(gòu)單,50萬(wàn)元及以上的采購(gòu)單就需要開(kāi)董事會(huì)討論決定。如下圖所示:試使用職責(zé)鏈模式設(shè)計(jì)并實(shí)現(xiàn)該系統(tǒng)。4. 某公司欲開(kāi)發(fā)一個(gè)軟件系統(tǒng)的在線文檔幫助系統(tǒng),用戶可以在任何一個(gè)查詢上下文中輸入查詢關(guān)鍵字,如果當(dāng)前查詢環(huán)境下沒(méi)有相關(guān)內(nèi)容,則系統(tǒng)會(huì)將查詢按照一定的順序轉(zhuǎn)發(fā)給其他查詢環(huán)境?;谏鲜鲂枨?,試采用職責(zé)鏈模式對(duì)該系統(tǒng)進(jìn)行設(shè)計(jì)。5. 房間中的開(kāi)關(guān)就是命令模式的一個(gè)

5、實(shí)例,現(xiàn)用命令模式來(lái)模擬開(kāi)關(guān)的功能,可控制對(duì)象包括電燈和電風(fēng)扇,繪制相應(yīng)的類圖并編程模擬實(shí)現(xiàn)。6. 某軟件公司欲開(kāi)發(fā)一個(gè)基于Windows平臺(tái)的公告板系統(tǒng)。系統(tǒng)提供一個(gè)主菜單(Menu),在主菜單中包含了一些菜單項(xiàng)(MenuItem),可以通過(guò)Menu類的addMenuItem()方法增加菜單項(xiàng)。菜單項(xiàng)的主要方法是click(),每一個(gè)菜單項(xiàng)包含一個(gè)抽象命令類,具體命令類包括OpenCommand(打開(kāi)命令),CreateCommand(新建命令),EditCommand(編輯命令)等,命令類具有一個(gè)execute()方法,用于調(diào)用公告板系統(tǒng)界面類(BoardScreen)的open()、cr

6、eate()、edit()等方法?,F(xiàn)使用命令模式設(shè)計(jì)該系統(tǒng),使得MenuItem類與BoardScreen類的耦合度降低,繪制類圖并編程實(shí)現(xiàn)。三、實(shí)驗(yàn)要求1. 結(jié)合實(shí)例,正確無(wú)誤地繪制代理模式、職責(zé)鏈模式和命令模式的模式結(jié)構(gòu)圖;2. 使用任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)代理模式、職責(zé)鏈模式和命令模式實(shí)例,代碼運(yùn)行正確無(wú)誤。四、實(shí)驗(yàn)步驟1. 結(jié)合實(shí)例,使用PowerDesigner繪制代理模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;2. 結(jié)合實(shí)例,使用PowerDesigner繪制代理模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;3. 結(jié)合實(shí)例,使用PowerDesigner繪制職責(zé)鏈模式

7、實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;4. 結(jié)合實(shí)例,使用PowerDesigner繪制職責(zé)鏈模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;5. 結(jié)合實(shí)例,使用PowerDesigner繪制命令模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例;6. 結(jié)合實(shí)例,使用PowerDesigner繪制命令模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)該模式實(shí)例。五、實(shí)驗(yàn)結(jié)果1. 類圖:實(shí)現(xiàn)代碼:public class Client public static void main(String args) AbstractLog abstractLog = (AbstractLog)XMLUtil

8、.getBean();abstractLog.method();public interface AbstractLog public void method();public class ProxyLog implements AbstractLogprivate RealLog realLog;public ProxyLog()realLog = new RealLog();Overridepublic void method() / TODO Auto-generated method stubpreMethod();realLog.method();postRequest();publ

9、ic void preMethod() System.out.println("方法method()被調(diào)用");public void postRequest()System.out.println("方法method()調(diào)用成功");public class RealLog implements AbstractLogOverridepublic void method() / TODO Auto-generated method stubSystem.out.println("方法method()執(zhí)行中");<?xml ve

10、rsion="1.0" encoding="UTF-8"?><config><className>ProxyLog</className></config>2. 類圖:實(shí)現(xiàn)代碼:public class Client public static void main(String args) AbstractQuery abstractQuery = (AbstractQuery)XMLUtil.getBean();abstractQuery.query();System.out.println(&qu

11、ot;-");abstractQuery.setPermission(1);abstractQuery.query();public interface AbstractQuery public void query();public void setPermission(int permission);public void queryLog();public class RealQuery implements AbstractQueryOverridepublic void query() / TODO Auto-generated method stubSystem.out.

12、println("該用戶查詢次數(shù)加1");Overridepublic void setPermission(int permission) / TODO Auto-generated method stubOverridepublic void queryLog() / TODO Auto-generated method stubpublic class ProxyQuery implements AbstractQueryprivate RealQuery realQuery;private int permission;public ProxyQuery()real

13、Query = new RealQuery();permission = 0;Overridepublic void query() / TODO Auto-generated method stubidentify();public void setPermission(int permission) this.permission = permission;public void identify() if (permission = 0) System.out.println("用戶沒(méi)有查詢的權(quán)限");elserealQuery.query();queryLog();

14、public void queryLog()System.out.println("記錄查詢?nèi)罩?quot;);<?xml version="1.0" encoding="UTF-8"?><config><className>ProxyQuery</className></config>3. 類圖:實(shí)現(xiàn)代碼:public class Client public static void main(String args) Leader leader1,leader2,leader3,le

15、ader4;leader1 = new BoardOfDirectors();leader2 = new Chairman();leader3 = new ViceChairman();leader4 = new Director();leader4.setSuccessor(leader3);leader3.setSuccessor(leader2);leader2.setSuccessor(leader1);PhuraseRequest phuraseRequest1,phuraseRequest2,phuraseRequest3,phuraseRequest4;phuraseReques

16、t1 = new PhuraseRequest(4);phuraseRequest2 = new PhuraseRequest(9);phuraseRequest3 = new PhuraseRequest(46);phuraseRequest4 = new PhuraseRequest(60);leader4.handleRequest(phuraseRequest1);leader4.handleRequest(phuraseRequest2);leader4.handleRequest(phuraseRequest3);leader4.handleRequest(phuraseReque

17、st4);public abstract class Leader protected String name; protected Leader successor; public abstract void handleRequest(PhuraseRequest request); public void setSuccessor(Leader successor) this.successor = successor; public class PhuraseRequest private int phurasePrice = 0;public PhuraseRequest(int p

18、hurasePrice)this.phurasePrice = phurasePrice;public int getPhurasePrice() return phurasePrice;public void setPhurasePrice(int phurasePrice) this.phurasePrice = phurasePrice;public class Director extends LeaderOverridepublic void handleRequest(PhuraseRequest request) / TODO Auto-generated method stub

19、if (request.getPhurasePrice()<5) System.out.println("主任審批通過(guò)"+"審批金額為: "+request.getPhurasePrice();else if(this.successor!=null)this.successor.handleRequest(request);public class ViceChairman extends LeaderOverridepublic void handleRequest(PhuraseRequest request) / TODO Auto-gen

20、erated method stubif (request.getPhurasePrice()<10) System.out.println("副董事長(zhǎng)審批通過(guò)"+"審批金額為: "+request.getPhurasePrice();else if(this.successor!=null)this.successor.handleRequest(request);public class Chairman extends LeaderOverridepublic void handleRequest(PhuraseRequest request

21、) / TODO Auto-generated method stubif (request.getPhurasePrice()<50) System.out.println("董事長(zhǎng)審批通過(guò)"+"審批金額為: "+request.getPhurasePrice();else if(this.successor!=null)this.successor.handleRequest(request);public class BoardOfDirectors extends LeaderOverridepublic void handleReques

22、t(PhuraseRequest request) / TODO Auto-generated method stubSystem.out.println("數(shù)額較大,董事會(huì)討論后再做決定");4. 類圖:/* * Module: QueryRequest.java * Author: zxh * Purpose: Defines the Class QueryRequest */import java.util.*;/* pdOid 4e220f24-3dbf-407c-aae7-0a86899cefb4 */public class QueryRequest /* pd

23、Oid 84ba45ef-06a1-4f63-8d3b-1b18fa116140 */ private String queryKey; /* pdOid 5b785384-1a48-456a-9ad4-a2571767567b */ public String getQueryKey() return queryKey; /* param newQueryKey * pdOid 4674578e-a00f-497e-bb60-56e1beb82330 */ public void setQueryKey(String newQueryKey) queryKey = newQueryKey;

24、/* param queryKey * pdOid b719ff48-1a7a-4840-bda3-dc8f8a6ce13a */ public void queryRequest(String queryKey) / TODO: implement /* * Module: Paragraph.java * Author: zxh * Purpose: Defines the Class Paragraph */import java.util.*;/* pdOid 9ae7099f-e76a-41bd-968c-11c095a29790 */public class Paragraph e

25、xtends Context /* param request * pdOid 8965c152-c6be-4bdc-8f62-51a30d452723 */ public void handleRequest(QueryRequest request) / TODO: implement /* * Module: Essay.java * Author: zxh * Purpose: Defines the Class Essay */import java.util.*;/* pdOid 287918b6-621f-47bc-9021-bbd5d42333f1 */public class

26、 Essay extends Context /* param request * pdOid 492641e0-df9b-4937-b8de-d81e7eb8cd9a */ public void handleRequest(QueryRequest request) / TODO: implement /* * Module: Context.java * Author: zxh * Purpose: Defines the Class Context */import java.util.*;/* pdOid 81ad714e-b1a6-4b8f-9b13-9f0310e3959d */

27、public class Context /* pdOid 72000b24-0a7b-410a-94d8-cceebd35349e */ protected Context successor; /* pdRoleInfo migr=no name=Context assc=association1 type=Aggregation */ public Context contextB; /* pdOid 5d2dca0a-ffd4-4e70-9373-4576d02b959d */ public void setSuccessor() / TODO: implement /* param

28、request * pdOid 983548e8-64cd-42e5-9f62-c74fb1e4c027 */ public void handleRequest(QueryRequest request) / TODO: implement /* * Module: Sentence.java * Author: zxh * Purpose: Defines the Class Sentence */import java.util.*;/* pdOid 826d3c00-8fd4-4c26-81ca-1b51299b726d */public class Sentence extends

29、Context /* param request * pdOid c86cba07-17d2-4250-a8c5-5e1f07ea9878 */ public void handleRequest(QueryRequest request) / TODO: implement 5. 類圖:實(shí)現(xiàn)代碼:public class Client public static void main(String args) AbstractCommand openFanCommand = new openFanCommand();AbstractCommand closeFanCommand = new c

30、loseFanCommand();AbstractCommand openLightCommand = new openLightCommand();AbstractCommand closeLightCommand = new closeLightCommand();Controller controller = new Controller(openFanCommand, closeFanCommand, openLightCommand, closeLightCommand);controller.openFan();controller.closeFan();controller.op

31、enLight();controller.closeLight();public class Controller private AbstractCommand openFanCommand;private AbstractCommand closeFanCommand;private AbstractCommand openLightCommand;private AbstractCommand closeLightCommand;public Controller(AbstractCommand openFanCommand,AbstractCommand closeFanCommand

32、,AbstractCommand openLightCommand,AbstractCommand closeLightCommand) / TODO Auto-generated constructor stubthis.openFanCommand = openFanCommand;this.closeFanCommand = closeFanCommand;this.openLightCommand = openLightCommand;this.closeLightCommand = closeLightCommand;public void openFan()openFanComma

33、nd.excute();public void closeFan()closeFanCommand.excute();public void openLight()openLightCommand.excute();public void closeLight()closeLightCommand.excute();public class closeFanCommand extends AbstractCommandprivate Fan fan;public closeFanCommand() / TODO Auto-generated constructor stubfan = new

34、Fan();Overridepublic void excute() / TODO Auto-generated method stubfan.close();public class openFanCommand extends AbstractCommandprivate Fan fan;public openFanCommand() / TODO Auto-generated constructor stubfan = new Fan();Overridepublic void excute() / TODO Auto-generated method stubfan.open();pu

35、blic class closeLightCommand extends AbstractCommandprivate Light light;public closeLightCommand() / TODO Auto-generated constructor stublight = new Light();Overridepublic void excute() / TODO Auto-generated method stublight.close();public class openLightCommand extends AbstractCommandprivate Light

36、light;public openLightCommand() / TODO Auto-generated constructor stublight = new Light();Overridepublic void excute() / TODO Auto-generated method stublight.open();public abstract class AbstractCommand public abstract void excute();public class Fan public void open()System.out.println("開(kāi)不起空調(diào),只

37、能吹風(fēng)扇了");public void close()System.out.println("連風(fēng)扇都吹不起了");public class Light public void open()System.out.println("上帝說(shuō)要有光,然后就開(kāi)了燈");public void close()System.out.println("真的勇士敢于面對(duì)無(wú)邊的黑暗,然后我就給他關(guān)了燈");6. 類圖:實(shí)現(xiàn)代碼:import java.util.ArrayList;public class Menu private stati

38、c ArrayList<MenuItem> menuItemList = new ArrayList(); public static void addMenuItem(MenuItem menuItem)menuItemList.add(menuItem);public static void main(String args) AbstractCommand openCommand,createCommand,editCommand;openCommand = new OpenCommand();createCommand = new CreateCommand();editC

39、ommand = new EditCommand();MenuItem menuItem1,menuItem2,menuItem3;menuItem1 = new MenuItem();menuItem2 = new MenuItem();menuItem3 = new MenuItem();menuItem1.setCommand(openCommand);menuItem2.setCommand(createCommand);menuItem3.setCommand(editCommand);menuItemList.add(menuItem1);menuItemList.add(menuI

溫馨提示

  • 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)論