




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、軟件體系結構實驗報告項目名稱 行為型設計模式實驗 專業(yè)班級 學 號 姓 名 實驗成績:批閱教師:年 月 日實驗6 行為型設計模式實驗實驗學時: 2 每組人數: 1 實驗類型: 3 (1:基礎性 2:綜合性 3:設計性 4:研究性)實驗要求: 1 (1:必修 2:選修 3:其它)實驗類別: 3 (1:基礎 2:專業(yè)基礎 3:專業(yè) 4:其它)一、實驗目的熟練使用PowerDesigner和任意一種面向對象編程語言實現幾種常見的行為型設計模式,包括觀察者模式和策略模式,理解每一種設計模式的模式動機,掌握模式結構,學習如何使用代碼實現這些模式。二、實驗內容1. 某實時在線股票軟件需要提供如下功能:當股
2、票購買者所購買的某支股票價格變化幅度達到5%時,系統將自動發(fā)送通知(包括新價格)給購買該股票的所有股民。試使用觀察者模式設計并實現該系統,要求繪制相應的類圖并編程模擬實現。2. 某公司欲開發(fā)一套機房監(jiān)控系統,如果機房達到某一指定溫度,溫度傳感器(Thermosensor)將自動傳遞信號給各種響應設備,例如警示燈(CautionLight)將閃爍(flicker()、報警器(Annunciator)將發(fā)出警報(alarm()、安全逃生門(SecurityDoor)將自動開啟(open()、隔熱門(InsulatedDoor)將自動關閉(close()等,每一種響應設備的行為由專門的程序來控制。為
3、了將來能夠方便地引入新類型的響應設備,采用觀察者模式和適配器模式設計并模擬實現該系統。3. 某軟件公司為某電影院開發(fā)了一套影院售票系統,在該系統中需要為不同類型的用戶提供不同的電影票(MovieTicket)打折(Discount)方式,具體打折方案如下:(1) 學生憑學生證可享受票價8折優(yōu)惠;(2) 年齡在10周歲及以下的兒童可享受每張票減免10元的優(yōu)惠(原始票價需大于等于20元);(3) 影院VIP用戶除享受票價半價優(yōu)惠外還可進行積分,積分累計到一定額度可換取電影院贈送的獎品。該系統在將來可能還要根據需要引入新的打折方式。試使用策略模式設計并編程模擬實現該影院售票系統。4. 某軟件公司欲開
4、發(fā)一款飛機模擬系統,該系統主要模擬不同種類飛機的飛行特征與起飛特征,需要模擬的飛機種類及其特征如表1所示:表1 飛機種類及特征一覽表飛機種類起飛特征飛行特征直升機(Helicopter)垂直起飛(VerticalTakeOff)亞音速飛行(SubSonicFly)客機(AirPlane)長距離起飛(LongDistanceTakeOff)亞音速飛行(SubSonicFly)殲擊機(Fighter)長距離起飛(LongDistanceTakeOff)超音速飛行(SuperSonicFly)鷂式戰(zhàn)斗機(Harrier)垂直起飛(VerticalTakeOff)超音速飛行(SuperSonicFly
5、)為將來能夠模擬更多種類的飛機,試采用策略模式設計并模擬實現該飛機模擬系統。三、實驗要求1. 結合實例,正確無誤地繪制觀察者模式和策略模式的模式結構圖;2. 使用任意一種面向對象編程語言實現觀察者模式和策略模式實例,代碼運行正確無誤。四、實驗步驟1. 結合實例,使用PowerDesigner繪制觀察者模式實例結構圖并用面向對象編程語言實現該模式實例;2. 結合實例,使用PowerDesigner繪制觀察者模式實例結構圖并用面向對象編程語言實現該模式實例;3. 結合實例,使用PowerDesigner繪制策略模式實例結構圖并用面向對象編程語言實現該模式實例;4. 結合實例,使用PowerDesi
6、gner繪制策略模式實例結構圖并用面向對象編程語言實現該模式實例。五、實驗結果1. 類圖:實現代碼:public class Client public static void main(String args)SharesSubject share1 = new ConcreteShares(100);Invester observer1 = new Invester("張三");Invester observer2 = new Invester("李四");share1.addInvester(observer1);share1.addInveste
7、r(observer2);share1.change();/* * Module: ConcreteShares.java * Author: ct * Purpose: Defines the Class ConcreteShares */import java.util.*;/* pdOid 03891fd5-7c63-4b84-9bbf-2430332d48d2 */public class ConcreteShares extends SharesSubject /* pdOid ab879b87-ee8a-4265-93ea-a9f2ef3b54d9 */private double
8、 price;ConcreteShares(double newPrice)price = newPrice;public void setPrice(double newPrice)price = newPrice;public double getPrice()return price; public void change() / TODO: implement System.out.println("變化超過5%"); System.out.println("-"); for(MyObserver obs:observer) (MyObserve
9、r)obs).getChange(price); /* * Module: Invester.java * Author: ct * Purpose: Defines the Class Invester */import java.util.*;/* pdOid a295ff58-e079-42a6-a1d9-f741697dae60 */public class Invester implements MyObserver public String name;Invester(String name) = name; public void getChange(doub
10、le Price) / TODO: implement System.out.println("正在發(fā)送信息給用戶"+name+",目前該股票價格為"+Price); /* * Module: MyObserver.java * Author: ct * Purpose: Defines the Interface MyObserver */import java.util.*;/* pdOid 995b8e6a-43c4-4fa9-99ca-10b78081beae */public interface MyObserver /* pdOid 463b
11、82d3-31e1-4c0a-afae-74595234ab82 */ public void getChange(double Price);/* * Module: SharesSubject.java * Author: ct * Purpose: Defines the Class SharesSubject */import java.util.*;/* pdOid 23f9decd-a8e4-4e34-9cf2-6abf8fcc3678 */public abstract class SharesSubject /* pdOid 06f9c8c6-c557-4a15-8bb9-bc
12、2034891d68 */ public ArrayList<MyObserver> observer = new ArrayList(); public void addInvester(MyObserver newObserver) / TODO: implement observer.add(newObserver); /* pdOid 3050e00a-10fc-4cb8-9492-222fcc9964a2 */ public void removeInvester(MyObserver oldObserver) / TODO: implement observer.rem
13、ove(oldObserver); /* pdOid 7dc77e25-a4ab-4193-96bc-bca75699feaf */ public abstract void change(); 2. 類圖:實現代碼:v/* * Module: Annunciatior.java * Author: ct * Purpose: Defines the Class Annunciatior */import java.util.*;/* pdOid 3510b9e2-117f-483b-8974-09e848391cf1 */public class Annunciator /* pdOid a
14、6c25fe7-e2d8-42da-ba61-b75314a19725 */ public void alarm() / TODO: implement System.out.println("警報響起"); /* * Module: AnnuciatorObserver.java * Author: ct * Purpose: Defines the Class AnnuciatorObserver */import java.util.*;/* pdOid 30002f48-45d3-4162-94aa-a9d00c4768ec */public class Annun
15、ciatorObserver implements MyObserver /* pdOid 7b599933-3f2b-46e5-8f57-96eb28d90d5c */ private Annunciator annunciator; AnnunciatorObserver(Annunciator newAnnunciator) this.annunciator = newAnnunciator; /* pdOid cc9d6b91-6264-4d80-804d-cb8a933fc46c */ public void response() / TODO: implement annuncia
16、tor.alarm(); /* * Module: CautionLight.java * Author: ct * Purpose: Defines the Class CautionLight */import java.util.*;/* pdOid 5cf7cee6-d049-4109-a349-801aa6589072 */public class CautionLight /* pdOid 212c62b0-7f33-44ba-a43e-7e9754286e6a */ public void flicker() / TODO: implement System.out.printl
17、n("應急燈打開"); /* * Module: CautionLightObserver.java * Author: ct * Purpose: Defines the Class CautionLightObserver */import java.util.*;/* pdOid 438ef70a-32ca-4bb3-a07e-71d6606642e5 */public class CautionLightObserver implements MyObserver /* pdOid 0887aded-cca4-490d-af3c-203073d8356b */ pr
18、ivate CautionLight cautionLight; CautionLightObserver(CautionLight newCautionLight) this.cautionLight = newCautionLight; /* pdOid 6cba0a71-1bc7-4052-8f95-b9ad83e34d2a */ public void response() / TODO: implement cautionLight.flicker(); public class Client public static void main(String args)MySubject
19、 tempreture = new Tempreture();MyObserver annunciatorObserver,cautionLightObserver,insulatedDoorObserver,securityDoorObserver;Annunciator annunciator = new Annunciator();CautionLight cautionLight = new CautionLight();InsulatedDoor insulatedDoor = new InsulatedDoor();SecurityDoor securityDoor = new S
20、ecurityDoor();annunciatorObserver = new AnnunciatorObserver(annunciator);cautionLightObserver = new CautionLightObserver(cautionLight);insulatedDoorObserver = new InsulatedDoorObserver(insulatedDoor);securityDoorObserver = new SecurityDoorObserver(securityDoor);tempreture.add(securityDoorObserver);t
21、empreture.add(insulatedDoorObserver);tempreture.add(cautionLightObserver);tempreture.add(annunciatorObserver);tempreture.change();/* * Module: InsulatedDoor.java * Author: ct * Purpose: Defines the Class InsulatedDoor */import java.util.*;/* pdOid f495d797-be3a-4141-9d50-325742eb46ab */public class
22、InsulatedDoor /* pdOid 7540dd3b-1f25-4d54-8828-73222f87e612 */ public void close() / TODO: implement System.out.println("隔離門關閉"); /* * Module: InsulatedDoorObserver.java * Author: ct * Purpose: Defines the Class InsulatedDoorObserver */import java.util.*;/* pdOid 26920542-c6ee-4b65-b8a4-a5
23、5c13119475 */public class InsulatedDoorObserver implements MyObserver /* pdOid 9da21a0d-9858-485c-9d9b-5e3fc4e7c652 */ private InsulatedDoor insulatedDoor; InsulatedDoorObserver(InsulatedDoor newInsulatedDoor) this.insulatedDoor = newInsulatedDoor; /* pdOid 2044ceef-9d41-474b-be4d-8feb1aeb828a */ pu
24、blic void response() / TODO: implement insulatedDoor.close(); /* * Module: MyObserver.java * Author: ct * Purpose: Defines the Interface MyObserver */import java.util.*;/* pdOid 2414fcb6-7a72-4e74-b7e4-ff02a04c2264 */public interface MyObserver /* pdOid be86483c-16d5-4f53-a1f1-a12f56fb13c6 */ void r
25、esponse();/* * Module: MySubject.java * Author: ct * Purpose: Defines the Class MySubject */import java.util.*;/* pdOid 0af97a55-e330-4640-abe4-26dc1dc49144 */public abstract class MySubject /* pdOid 60bd7861-80b9-4756-893b-e294a09a9262 */ protected ArrayList<MyObserver> observer= new ArrayLis
26、t(); /* param newobserver * pdOid 8f093415-73f6-40fd-b6ef-c82034c60bc7 */ public void add(MyObserver newobserver) / TODO: implement observer.add(newobserver); /* param old * pdOid e1b7ad74-946a-48f7-b813-c55737f4dd96 */ public void remove(MyObserver old) / TODO: implement observer.remove(old); /* pd
27、Oid 82c76231-cb91-499b-8749-e5e9fc3fc365 */ public abstract void change(); /* * Module: SecurityDoor.java * Author: ct * Purpose: Defines the Class SecurityDoor */import java.util.*;/* pdOid bc24bd59-23fe-44fd-b1ae-bbbe132f467a */public class SecurityDoor /* pdOid 2925ef22-eec2-4758-bf42-1c32d181406
28、0 */ public void open() / TODO: implement System.out.println("安全門打開"); /* * Module: SecurityDoorObserver.java * Author: ct * Purpose: Defines the Class SecurityDoorObserver */import java.util.*;/* pdOid 754901d0-b712-40a7-8097-718c2e4000ec */public class SecurityDoorObserver implements MyO
29、bserver /* pdOid 7f9d61ef-36f4-487d-b290-0ddf20df401f */ private SecurityDoor securityDoor; SecurityDoorObserver(SecurityDoor newSecurityDoor) this.securityDoor = newSecurityDoor; /* pdOid 78b7cc18-a6b4-416c-aecb-a87580c4c50d */ public void response() / TODO: implement securityDoor.open(); 3. 類圖:實現代
30、碼:/* * Module: ChildrenDiscount.java * Author: ct * Purpose: Defines the Class ChildrenDiscount */import java.util.*;/* pdOid 40bf41f9-236d-421e-a4cb-c28e520efd0d */public class ChildrenDiscount implements Discount /* pdOid 9832b602-b5e6-4fdf-9eef-b823cfcaafc0 */ public void discount() / TODO: imple
31、ment System.out.println("年齡在10周歲及以下的兒童可享受每張票減免10元的優(yōu)惠(原始票價需大于等于20元)"); public class Client public static void main(String args)MovieTicket movieTicket = new MovieTicket();Discount studentDiscount,vipDiscount,childrenDiscount;studentDiscount = new StudentDiscount();vipDiscount = new VIPDisco
32、unt();childrenDiscount = new ChildrenDiscount();movieTicket.setDiscount(studentDiscount);movieTicket.discount();movieTicket.setDiscount(childrenDiscount);movieTicket.discount();/* * Module: Discount.java * Author: ct * Purpose: Defines the Interface Discount */import java.util.*;/* pdOid ab09e5e6-a6
33、12-4b8b-8713-b313bee1f1b2 */public interface Discount /* pdOid 7cdc2442-371c-4b9b-be7f-d3878eb29b89 */ void discount();/* * Module: MovieTicket.java * Author: ct * Purpose: Defines the Class MovieTicket */import java.util.*;/* pdOid 28048305-6bd5-4e91-945a-890457a2b17b */public class MovieTicket /*
34、pdOid 041754c6-86bd-4a6e-910a-887ec3775bda */ private Discount discount; /* param discoutn * pdOid b2db074a-345d-4eae-b390-fea81a41ac1d */ public void setDiscount(Discount discount) / TODO: implement this.discount = discount; /* pdOid ef01351f-b74d-4765-af6d-e11813b3b53c */ public void discount() /
35、TODO: implement discount.discount(); /* * Module: StudentDiscount.java * Author: ct * Purpose: Defines the Class StudentDiscount */import java.util.*;/* pdOid 17d717dd-fcc8-4205-9965-503b708ac510 */public class StudentDiscount implements Discount /* pdOid ff1afcce-6145-4516-8a06-e6759f809323 */ publ
36、ic void discount() / TODO: implement System.out.println("學生憑學生證可享受票價8折優(yōu)惠;"); /* * Module: VIPDiscount.java * Author: ct * Purpose: Defines the Class VIPDiscount */import java.util.*;/* pdOid 716e64ca-a980-4447-a5a2-78ff105cb655 */public class VIPDiscount implements Discount /* pdOid 06f015
37、57-deff-4917-b797-7b3625ba65a7 */ public void discount() / TODO: implement System.out.println("影院VIP用戶除享受票價半價優(yōu)惠外還可進行積分,積分累計到一定額度可換取電影院贈送的獎品。"); 4. 類圖:實現代碼:/* * Module: Air.java * Author: ct * Purpose: Defines the Class Air */import java.util.*;/* pdOid e1360518-69e6-4e5a-9e93-3bf21d872ba0
38、*/public abstract class Air /* pdOid 2c2a7f6d-d49c-4597-b6c6-c31dffa5c80e */ protected TakeOff takeOff; /* pdOid 07984440-50a4-4c60-8761-92343ac941e4 */ protected Fly fly; public void setTakeOff(TakeOff newTakeOff) this.takeOff = newTakeOff; public void setFly(Fly newFly) this.fly = newFly; /* pdOid
39、 c3df320d-0c7b-4d6b-841c-04f3125a0ed1 */ public abstract void takeOff(); public abstract void fly() ;/* * Module: Airplane.java * Author: ct * Purpose: Defines the Class Airplane */import java.util.*;/* pdOid 510ff8af-57dc-4dcf-bd9f-6f04d926ffec */public class Airplane extends Air public void takeOf
40、f()System.out.print("客機正在模擬");takeOff.takeOff();public void fly()System.out.print("客機正在模擬");fly.fly();public class Client public static void main (String args)Air air;air = new Helicopter();Fly fly = new SubSonicFly();air.setFly(fly);TakeOff takeOff = new VerticalTakeOff();air.se
41、tTakeOff(takeOff);air.takeOff();air.fly();/* * Module: Flighter.java * Author: ct * Purpose: Defines the Class Flighter */import java.util.*;/* pdOid 64290630-333c-4a63-ac6c-3325225c9dbf */public class Flighter extends Air public void takeOff()System.out.print("戰(zhàn)斗機正在模擬");takeOff.takeOff();public void fly()System.out.print("戰(zhàn)斗機正在模擬");fly.fly();/* * Module: Fly.j
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年軍隊文職人員(漢語言文學類)考前必練題庫-附答案
- 《十二生肖》課件-1
- 《哈利路亞》課件
- 2025屆四川省會理縣第一中學高三下學期期中統一考試數學試題
- 物聯網應用技術課程介紹
- 2025年安順b2貨運資格證考試題庫
- 清明節(jié)傳統文化知識主題班會12
- 醫(yī)院醫(yī)學醫(yī)療護理報告模板70
- 腹腔鏡術后護理查房
- 商標注冊合同范例
- 2025遼寧沈陽地鐵集團有限公司所屬公司招聘11人筆試參考題庫附帶答案詳解
- 2025年合肥熱電集團春季招聘30人筆試參考題庫附帶答案詳解
- 旅行社安全生產培訓
- 電信行業(yè)用戶欠費催收策略與措施
- 銀行資格考試分析與策略試題及答案
- 多式聯運風險管理與優(yōu)化-全面剖析
- 岳樓小學建立學校年級班級家長四級防控工作聯系網絡實施方案
- 病人走失應急預案
- 2025年中國鐵塔考試試題及答案
- 2025年博士思政面試題及答案
- 廣東省深圳市深圳實驗學校等校聯考2024-2025學年九年級下學期開學考試語文試題(含答案)
評論
0/150
提交評論