版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版離婚協(xié)議書(shū)范本大全及婚姻財(cái)產(chǎn)分割策略2篇
- 2025年度臨床試驗(yàn)知識(shí)產(chǎn)權(quán)保護(hù)合同3篇
- 2024年離婚財(cái)產(chǎn)分割及子女教育協(xié)議3篇
- 2024年中國(guó)壓力噴霧干燥系統(tǒng)市場(chǎng)調(diào)查研究報(bào)告
- 2024年物流配送分包合同
- 2024年中國(guó)單刀型壓線分紙機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2024年中國(guó)十九英寸插箱線槽市場(chǎng)調(diào)查研究報(bào)告
- 2024年限量版墻布買賣合同版
- 2025版家居建材店租賃經(jīng)營(yíng)合作協(xié)議2篇
- 湖北花卉種植課程設(shè)計(jì)
- 2024-2025學(xué)年語(yǔ)文二年級(jí)上冊(cè) 部編版期末測(cè)試卷(含答案)
- 期末模擬卷 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè)(含答案)
- 2025年消防救援設(shè)施操作員職業(yè)技能資格知識(shí)考試題庫(kù)與答案
- 電玩城租賃經(jīng)營(yíng)合同
- 2024年中國(guó)救生圈市場(chǎng)調(diào)查研究報(bào)告
- 煤炭供應(yīng)項(xiàng)目(運(yùn)輸供貨方案)
- “雄鷹杯”全國(guó)小動(dòng)物醫(yī)師技能大賽考試題庫(kù)(660題)
- 2024年國(guó)家公務(wù)員考試《申論》真題(地市級(jí))及答案解析
- 2024-2030年中國(guó)游艇產(chǎn)業(yè)發(fā)展?fàn)顩r規(guī)劃分析報(bào)告權(quán)威版
- 學(xué)前兒童家庭與社區(qū)教育學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 新能源汽車充電樁項(xiàng)目可行性研究報(bào)告模板及范文
評(píng)論
0/150
提交評(píng)論