版權(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)目名稱 設(shè)計(jì)模式實(shí)驗(yàn) 2專業(yè)班級(jí)學(xué)號(hào)姓名實(shí)驗(yàn)成績(jī):批閱教師:年月日實(shí)驗(yàn) 3 設(shè)計(jì)模式實(shí)驗(yàn)二實(shí)驗(yàn)學(xué)時(shí): 4每組人數(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)康氖炀毷褂?PowerDesigner 和任意一種面向?qū)ο缶幊陶Z(yǔ)言實(shí)現(xiàn)幾種常見(jiàn)的行 為型設(shè)計(jì)模式,包括職責(zé)鏈模式、命令模式、觀察者模式和策略模式,理解每一 種設(shè)計(jì)模式的模式動(dòng)機(jī),掌握模式結(jié)構(gòu),學(xué)習(xí)如何使用代碼實(shí)現(xiàn)這些模式。二、實(shí)驗(yàn)內(nèi)容1. 某企業(yè)的 SCM(Supp
2、ly Chain Management,供應(yīng)鏈管理 ) 系統(tǒng)中包含一個(gè) 采購(gòu)審批子系統(tǒng)。 該企業(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)。2. 房間中的開(kāi)關(guān)是命令模式的一個(gè)實(shí)例, 現(xiàn)用命令模式來(lái)模擬開(kāi)關(guān)的功能, 可控制對(duì)象包括電燈和電風(fēng)扇,繪制相應(yīng)的類圖并編程模擬實(shí)
3、現(xiàn)。3. 某軟件公司欲開(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è)抽象命令類,具體命令類包括 OpenComman打d(開(kāi)命令 ) , CreateCommand新( 建命令 ) , EditCommand(編輯命令 )等,命令類具有一個(gè) execute() 方法,用于調(diào)用公告板系統(tǒng)界面類 (BoardScreen) 的 open() 、 create() 、edit() 等方法
4、?,F(xiàn)使用命令模式設(shè)計(jì)該系統(tǒng),使得 MenuItem 類與 BoardScreen 類的耦合度降低,繪制類圖并編程實(shí)現(xiàn)。4. 某實(shí)時(shí)在線股票軟件需要提供如下功能:當(dāng)股票購(gòu)買(mǎi)者所購(gòu)買(mǎi)的某支股 票價(jià)格變化幅度達(dá)到 5%時(shí),系統(tǒng)將自動(dòng)發(fā)送通知(包括新價(jià)格)給購(gòu)買(mǎi)該股票 的所有股民。 試使用觀察者模式設(shè)計(jì)并實(shí)現(xiàn)該系統(tǒng), 要求繪制相應(yīng)的類圖并編程 模擬實(shí)現(xiàn)。5. 某公司欲開(kāi)發(fā)一套機(jī)房監(jiān)控系統(tǒng),如果機(jī)房達(dá)到某一指定溫度,溫度傳 感器 (Thermosensor) 將自動(dòng)傳遞信號(hào)給各種響應(yīng)設(shè)備,例如警示燈 (CautionLight) 將閃爍(flicker()、報(bào)警器 (Annunciator) 將發(fā)出警報(bào)
5、(alarm() 、安全逃生門(mén) (SecurityDoor) 將自動(dòng)開(kāi)啟 (open() 、隔熱門(mén)(InsulatedDoor) 將自動(dòng)關(guān)閉 (close() 等,每一種響應(yīng)設(shè)備的行為由專門(mén)的程序 來(lái)控制。為了將來(lái)能夠方便地引入新類型的響應(yīng)設(shè)備, 采用觀察者模式和適配器 模式設(shè)計(jì)并模擬實(shí)現(xiàn)該系統(tǒng)。6. 某軟件公司為某電影院開(kāi)發(fā)了一套影院售票系統(tǒng),在該系統(tǒng)中需要為不 同類型的用戶提供不同的電影票 (MovieTicket) 打折 (Discount) 方式,具體打折 方案如下:(1) 學(xué)生憑學(xué)生證可享受票價(jià) 8 折優(yōu)惠;(2) 年齡在 10周歲及以下的兒童可享受每張票減免 10 元的優(yōu)惠(原始票
6、價(jià) 需大于等于 20 元);(3) 影院 VIP 用戶除享受票價(jià)半價(jià)優(yōu)惠外還可進(jìn)行積分, 積分累計(jì)到一定額 度可換取電影院贈(zèng)送的獎(jiǎng)品。該系統(tǒng)在將來(lái)可能還要根據(jù)需要引入新的打折方式。 試使用策略模式設(shè)計(jì)并編程模擬實(shí)現(xiàn)該影院售票系統(tǒng)。7. 為了實(shí)現(xiàn)一些特殊的顯示效果,某公司欲開(kāi)發(fā)一款手機(jī)數(shù)碼照片處理軟 件,在該軟件中為照片 (Photograph) 提供了多種濾鏡 (Filter) 效果,例如黑白濾 鏡 (BlackWhiteFilter) 、 單 色 濾 鏡 (MonochromaticFilter) 、 懷 舊 濾 鏡 (NostalgicFilter) 等,不同的濾鏡通過(guò)不同的算法對(duì)照片進(jìn)行
7、美化,如下圖所 示。該軟件可以靈活地增加一些新的濾鏡效果。選擇一種合適的設(shè)計(jì)模式來(lái)設(shè)計(jì)該照片處理軟件, 結(jié)合場(chǎng)景繪制相應(yīng)的類圖 并編程模擬實(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 繪制職責(zé)鏈模式實(shí)例結(jié)構(gòu)圖并用面向?qū)?象編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;2. 結(jié)合實(shí)例,使用 PowerDesigner 繪制命令模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο?編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;3. 結(jié)合實(shí)例,
8、使用 PowerDesigner 繪制命令模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο?編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;4. 結(jié)合實(shí)例,使用 PowerDesigner 繪制觀察者模式實(shí)例結(jié)構(gòu)圖并用面向?qū)?象編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;5. 結(jié)合實(shí)例,使用 PowerDesigner 繪制觀察者模式實(shí)例結(jié)構(gòu)圖并用面向?qū)?象編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;6. 結(jié)合實(shí)例,使用 PowerDesigner 繪制策略模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο?編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例;7. 結(jié)合實(shí)例,使用 PowerDesigner 繪制策略模式實(shí)例結(jié)構(gòu)圖并用面向?qū)ο?編程語(yǔ)言實(shí)現(xiàn)該模式實(shí)例。五、實(shí)驗(yàn)結(jié)果1. 類圖: 實(shí)現(xiàn)代碼:public class
9、PurchaseRequest public double amount;public int number;public String purpose; public double getAmount() return amount;publicvoid setAmount( double amount) this.amount = amount;publicint getNumber() return number;public void setNumber( int number) this .number = number;public String getPurpose() retu
10、rn purpose;public void setPurpose(String purpose) this .purpose = purpose;public class Approver protected Approver succesor;public Approver() succesor = null ;public void processRequest(PurchaseRequest aRequest) if (succesor!= null )cessRequest(aRequest);public void setSuccesor(Approver
11、succesor) this .succesor = succesor;public class Congress extends Approver public void processRequest(PurchaseRequest request) if (request.getAmount()>=500000)System. out .println(" 董事會(huì) ");public class Director extends Approver public void processRequest(PurchaseRequest request)if (requ
12、est.getAmount()<50000) System. out .println(" 主任");else if (this .succesor!= null )this .cessRequest(request);public class President extends Approverpublic void processRequest(PurchaseRequest request) if (request.getAmount()<500000)System. out .println(" 董事長(zhǎng) ");
13、else if (this .succesor!= null )this .cessRequest(request);public class VicePresident extends Approverpublic void processRequest(PurchaseRequest request) if (request.getAmount()<100000)System. out .println(" 副董事長(zhǎng) ");else if (this .succesor!= null )this .cessReque
14、st(request);2. 類圖:實(shí)現(xiàn)代碼:public abstract class AbstractCommand public abstract void open();public abstract void close();public class Switch private AbstractCommand command;public void setCommand(AbstractCommand command) this .command = command;public void open()command.open();public void close()comman
15、d.close();public class Fun public void open()System. out .println(" 開(kāi)風(fēng)扇 ");public void close()System. out .println(" 關(guān)風(fēng)扇 ");public class Light public void open()System. out .println(" 打開(kāi)");public void close() System. out .println(" 關(guān)燈");public class FunCommand
16、e xtends AbstractCommand private Fun fun = new Fun();Overridepublic void open() / TODO Auto-generated method stub fun.open();Overridepublic void close() / TODO Auto-generated method stub fun.close();public class LightCommand extends AbstractCommand private Light light =new Light();Override public vo
17、id open() / TODO Auto-generated method stub light.open();Overridepublic void close() / TODO Auto-generated method stub light.close();3. 類圖:實(shí)現(xiàn)代碼:public interface Command publicvoid excute();public class MenuItem privateString name;privateCommand command;publicMenuItem(String name) = name;pub
18、licString getName() return name;public void setName(String name) this .name = name;public Command getCommand() return command;public void setCommand(Command command) this .command = command;public void click() command.excute();importpublic class Menu public ArrayList itemList =new ArrayList();public
19、 void addMenuItem(MenuItem item) itemList.add(item);public class OpenCommandim plements Command private BoardScreen screen;public OpenCommand(BoardScreen screen) super ();this .screen = screen;Overridepublic void excute() / TODO Auto-generated method stub screen.open();public class CreateCommand imp
20、lements Command private BoardScreen screen;public CreateCommand(BoardScreen screen) super ();this .screen = screen;Overridepublic void excute() / TODO Auto-generated method stub screen.create();public class EidtCommand implements Command private BoardScreen screen;public EidtCommand(BoardScreen scre
21、en) super ();this .screen = screen;Overridepublic void excute() / TODO Auto-generated method stub screen.edit();public class BoardScreen private Menu menu;private MenuItem openItem,createItem,editItem; public BoardScreen()menu = new Menu();openItem = new MenuItem(" 打開(kāi) "); createItem = new
22、MenuItem(" 新建 "); editItem = new MenuItem(" 編輯 "); menu.addMenuItem(openItem); menu.addMenuItem(createItem);menu.addMenuItem(editItem);public void display()System. out .println(" 主菜單選項(xiàng): "); for (Object obj : menu.itemList)System. out .println(MenuItem)obj).getName()publ
23、ic void open()System. out .println("public void create()System. out .println("public void edit()System. out .println("public Menu getMenu() return menu;顯示打開(kāi)窗口! ");顯示新建窗口! ");顯示編輯窗口! ");4. 類圖: 實(shí)現(xiàn)代碼:public interface Investor public void response(Stock stck);public class C
24、oncreteInvestor implements Investor private String name;public ConcreteInvestor(String name) super ();this .name = name;Overridepublic void response(Stock stock) / TODO Auto-generated method stubSystem. out .println(name+": ");System. out .println(stock.getStockName()+"漲幅超過(guò)5%");S
25、ystem. out .println(" 新價(jià)格 "+stock.getPrice();importpublic class Stock private ArrayList<Investor> investors;private String stockName;private double price;public Stock(String stockName, double price) super ();this .stockName = stockName;this .price = price;investors = new ArrayList<
26、;Investor>();public void attach(Investor investor) investors.add(investor);public void detach(Investor investor) investors.remove(investor);public void notifyInvestor()for (Object obj : investors)(Investor)obj).response( this );public String getStockName() return stockName;public void setStockNam
27、e(String stockName) this .stockName = stockName;public double getPrice() return price;public void setPrice( double price) double range = Math. abs(price- this .price)/ this .price; this .price = price;if (range>=0.05)this .notifyInvestor();public class Client public static void main(String args)
28、Investor investor1,investor2;investor1 = new ConcreteInvestor(" 哈哈 ");investor2 = new ConcreteInvestor(" 呵呵 ");Stock haier = new Stock("haier", 20.00); haier.attach(investor1);haier.attach(investor2);haier.setPrice(25.00);5. 類圖:實(shí)現(xiàn)代碼:public interface AlarmListener public
29、 void response();public class Annunciator implements AlarmListener private Annunciator annunciator;Overridepublic void response() / TODO Auto-generated method stub annunciator.alarm();public void alarm()System. out .println(" 報(bào)警器警報(bào) ");public class CautionLight implements AlarmListener priv
30、ate CautionLight light;Overridepublic void response() / TODO Auto-generated method stublight.flicker();public void flicker()System. out .println(" 警示燈閃爍 ");public class InsulatedDoor implements AlarmListener private InsulatedDoor insulatedDoor;Overridepublic void response() / TODO Auto-gen
31、erated method stub insulatedDoor.close();public void close()System. out .println(" 隔熱門(mén)關(guān)閉 ");public class SecurityDoor implements AlarmListener private SecurityDoor securityDoor;Overridepublic void response() / TODO Auto-generated method stubsecurityDoor.open();public void open()System. out
32、 .println(" 安全門(mén)開(kāi)啟 ");importpublic class Thermosensor private ArrayList<AlarmListener> alarm;public void attach(AlarmListener listener) alarm.add(listener);public void detach(AlarmListener listener) alarm.remove(listener);public void notifyAlarm()for (Object obj : alarm)(AlarmListener
33、)obj).response();6. 類圖: 實(shí)現(xiàn)代碼: public interface Discount public double calculate( double price);public class CIPDiscount implements DiscountOverridepublic double calculate( double price) / TODO Auto-generated method stub System. out .println(" 增加積分! "); return price*0.5;public class MovieTicket private double price;private Discount discount;public double getPrice() return discount.calculate(price);public Discount ge
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滾珠絲杠課程設(shè)計(jì)圖紙
- 自行車(chē)的人機(jī)課程設(shè)計(jì)
- 荒島植物辨識(shí)課程設(shè)計(jì)
- 泵房的課程設(shè)計(jì)
- 智慧物流課課程設(shè)計(jì)
- 英語(yǔ)思維導(dǎo)圖課程設(shè)計(jì)
- 古泉1100kV千伏GIS安裝施工方案(報(bào)公司審核)
- 植物根莖科學(xué)課程設(shè)計(jì)
- 長(zhǎng)沙交通集團(tuán)日常維修定點(diǎn)項(xiàng)目招標(biāo)文件
- 物體打擊 課程設(shè)計(jì)
- 物業(yè)服務(wù)水電維修方案
- 2024至2030年中國(guó)生活用紙機(jī)械行業(yè)市場(chǎng)深度分析及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2024-2030年中國(guó)蔬菜種植市場(chǎng)發(fā)展方向及前景需求趨勢(shì)報(bào)告
- 2024年水生產(chǎn)處理工(初級(jí))職業(yè)技能鑒定考試題庫(kù)(含答案)
- 勞動(dòng)合同變更確認(rèn)書(shū)
- 象棋培訓(xùn)機(jī)構(gòu)合伙協(xié)議
- 2025屆貴州遵義市桐梓縣數(shù)學(xué)七年級(jí)第一學(xué)期期末經(jīng)典試題含解析
- 藍(lán)色糧倉(cāng)-水產(chǎn)學(xué)專業(yè)導(dǎo)論智慧樹(shù)知到期末考試答案章節(jié)答案2024年中國(guó)海洋大學(xué)、山東大學(xué)、中國(guó)科學(xué)院海洋研究所、上海海洋大學(xué)、華中農(nóng)業(yè)大學(xué)、大連海洋大學(xué)、集美大學(xué)
- (高清版)JTGT D31-06-2017 季節(jié)性凍土地區(qū)公路設(shè)計(jì)與施工技術(shù)規(guī)范
- 幼兒園健康體檢活動(dòng)方案及流程
- 二年級(jí)乘除法口算題計(jì)算練習(xí)大全2000題(可直接打印)
評(píng)論
0/150
提交評(píng)論