




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗5結構型和行為型設計模式實驗實驗學時:二每組人數:_j實驗類型: (1:基礎性 2:綜合性 3:設計性4:研究性)實驗要求:1 (1:必修 2:選修 3:其它)實驗類別:3(1:基礎 2:專業基礎 3:專業4:其它)一、實驗目的熟練使用PowerDesigner和任意一種面向對象編程語言實現幾種常見的結構型和行為 型設計模式,包括代理模式、職責鏈模式和命令模式,理解每一種設計模式的模式動機,掌 握模式結構,學習如何使用代碼實現這些模式。二、實驗內容1 .在某應用軟件中需要記錄業務方法的調用日志,在不修改現有業務類的基礎上為每 一個類提供一個日志記錄代理類,在代理類中輸出日志,例如在業務方法
2、method()調用之前輸出“方法 method()被調用,調用時間為 2014-11-5 10:10:10 ",調用之后如果沒有拋異 常則輸出“方法 method()調用成功”,否則輸出“方法 method()調用失敗”。在代理類中調 用真實業務類的業務方法,使用代理模式設計該日志記錄模塊的結構,繪制類圖并編程模擬實現。2 .某軟件公司承接了某信息咨詢公司的收費商務信息查詢系統的開發任務,該系統的 基本需求如下:3 1)在進行商務信息查詢之前用戶需要通過身份驗證,只有合法用戶才能夠使用該查詢系統;4 2)在進行商務信息查詢時系統需要記錄查詢日志,以便根據查詢次數收取查詢費用。該軟件
3、公司開發人員已完成了商務信息查詢模塊的開發任務,現希望能夠以一種松耦合的方式向原有系統增加身份驗證和日志記錄功能,客戶端代碼可以無區別地對待原始的商務信息查詢模塊和增加新功能之后的商務信息查詢模塊,而且可能在將來還要在該信息查詢模塊中增加一些新的功能。試使用代理模式設計并編程模擬實現該收費商務信息查詢系統。【提示:使用保護代理和智能引用代理】3 .某企業的SCM(Supply Chain Management,供應鏈管理)系統中包含一個采購審批子系統。該企業的采購審批是分級進行的,即根據采購金額的不同由不同層次的主管人員來審批,主任可以審批 5萬元以下(不包括 5萬元)的采購單,副董事長可以審
4、批 5萬元至10 萬元(不包括10萬元)的采購單,董事長可以審批 10萬元至50萬元(不包括50萬元)的采購單,50萬元及以上的采購單就需要開董事會討論決定。如下圖所示:主任米購人員5萬元0金額V 10萬元10萬元金額V 50萬元 金額)50萬元試使用職責鏈模式設計并實現該系統。4 .某公司欲開發一個軟件系統的在線文檔幫助系統,用戶可以在任何一個查詢上下文中輸入查詢關鍵字,如果當前查詢環境下沒有相關內容,則系統會將查詢按照一定的順序轉發給其他查詢環境。基于上述需求,試采用職責鏈模式對該系統進行設計。5 .房間中的開關就是命令模式的一個實例,現用命令模式來模擬開關的功能,可控制 對象包括電燈和電
5、風扇,繪制相應的類圖并編程模擬實現。6 .某軟件公司欲開發一個基于Windows平臺的公告板系統。系統提供一個主菜單(Menu),在主菜單中包含了一些菜單項(MenuItem),可以通過 Menu類的addMenuItem()方法增加菜單項。菜單項的主要方法是click(),每一個菜單項包含一個抽象命令類,具體命令類包括 OpenCommandf(T開命令),CreateCommand(新建命令),EditCommand(編輯命令)等, 命令類具有一個execute。方法,用于調用公告板系統界面類(BoardScreen)的open()、create() 、edit()等方法。現使用命令模式設
6、計該系統,使得 MenuItem類與BoardScreen 類的耦合度降低,繪制類圖并編程實現。三、實驗要求1 .結合實例,正確無誤地繪制代理模式、職責鏈模式和命令模式的模式結構圖;2 .使用任意一種面向對象編程語言實現代理模式、職責鏈模式和命令模式實例,代碼 運行正確無誤。四、實驗步驟1.結合實例,使用PowerDesigner繪制代理模式實例結構圖并用面向對象編程語言實現該模式實例;2.結合實例,使用PowerDesigner繪制代理模式實例結構圖并用面向對象編程語言實現該模式實例;3.結合實例,使用PowerDesigner繪制職責鏈模式實例結構圖并用面向對象編程語言實現該模式實例;4.
7、結合實例,使用PowerDesigner繪制職責鏈模式實例結構圖并用面向對象編程語言實現該模式實例;5.結合實例,使用PowerDesigner繪制命令模式實例結構圖并用面向對象編程語言實現該模式實例;6.結合實例,使用PowerDesigner繪制命令模式實例結構圖并用面向對象編程語言實現該模式實例。五、實驗結果LogProtyLogRecord+ method () :void+ method () : void實現代碼:public interface AbstractLog public void method();import class LogProxy implements Ab
8、stractLog private LogRecord logRecord = new LogRecord();private SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private String time = (new Date();public void method() " 方法Method被調用,調用時間為:"+ time);try();"方法method()調用成功");catch(Exception e)"方法metho
9、d()調用失敗");public class LogRecord implements AbstractLog public void method() " 真實業務方法");import .*;public class XMLUtiletFirstChild();String cName=();public class SearchProxy implements Abstractsearch private RealSearch realSearch = new RealSearch();private Validator validator;public S
10、tring search(String uid) if (Validate(uid) String result = (uid);Log(uid);return result;elsereturn null;private void Log(String uid) "記錄日志");private boolean Validate(String uid) validator = new Validator();return (uid);public class RealSearch implements AbstractSearch public String search(
11、String uid) + "在進行具體查詢");return " 具體查詢內容"public class Validator public boolean validate(String uid) if (uid = "uid")"驗證通過");return true;"驗證失敗");return false;public class Client public static void main(String口 args)AbstractSearch as;as = (AbstractSear
12、ch)();("uid");2.類圖:fimey double附,50方由HpeaC才曲出* *CifllBi *Ogr43iM* ccfiaiBr1 aEMoneyj Wtre>j. widh*.理I" -it 1 pl - - i 廠+ MunajE-: S fE run-)QBMKlBF*,*11*件il<R7-JLfi'J 鼎tji+MI eJ* IbiFLf 必HB iannelt -rlgMRTnWlFglWK3pPlllPfl| 。中 1實現代碼:public abstract class Leader protected Lea
13、der successor;protected String name;public Leader()public abstract void handleRequest(PurchaseRequest pRequest);public Leader(String name) =name;public void setSuccessor(Leader successor) =successor;public class Director extends Leader public Director(String name) super(name);public void handleReque
14、st(PurchaseRequest pRequest) if () < 50000)"主任"+ + " 審批采購單,采購金額為" + ();else if != null)public class Manager extends Leader public Manager(String name) super(name);public void handleRequest(PurchaseRequest pRequest) if () < 100000)"副董事長"+ + " 審批采購單,采購金額為"
15、+ ();else if != null) public class GeneralManager extends Leader public GeneralManager(String name) super(name);public void handleRequest(PurchaseRequest pRequest) if () < 500000)"董事長"+ + "審批采購單,采購金額為"+ ();else if != null)public class BoardOfDirectors extends Leader public Boa
16、rdOfDirectors() public void handleRequest(PurchaseRequest pRequest) "董事會討論決定是否批準采購單,采購金額為"+ ();public class PurchaseRequest private double money;public PurchaseRequest(double money) =money;public double getMoney() return money;public void setMoney(double newMoney) money = newMoney;public c
17、lass Client public static void main(String口 args)Leader l1, l2, l3, l4;PurchaseRequest pr1, pr2, pr3, pr4, pr5;11 = new Director。'張三");12 = new Manager(" 李四");13 = new GeneralManager(" 王五");14 = new BoardOfDirectors();pr1 = new PurchaseRequest(20000);pr2 = new PurchaseRe
18、quest(60000);pr3 = new PurchaseRequest(120000);pr4 = new PurchaseRequest(520000);(l2);(;(l4);(pr1); (pr2);(pr3);(pr4);3.類圖:SearchContextabstractH successor SearchContext+ setSuccessor (SearchContext successor) - void+ search (String Iceyvoid7VSearch Co rtextlSearch Co ntext2+ search (String key) :vo
19、id + search (String key) void實現代碼:public abstract class SearchContext protected SearchContext successor;public void setSuccessor(SearchContext successor) =successor;public abstract void search(String key);public class SearchContextl extends SearchContext public void search(String key) if (key = &quo
20、t;key1")"在Context1中查到相關內容");else if != null)public class SearchContext2 extends SearchContext public void search(String key) if (key = "key2")"在Context2中查到相關內容");else if != null)else"未查到相關內容”);public class Client public static void main(String口 args)SearchCont
21、ext sc1, sc2;sc1 = new SearchContext1();sc2 = new SearchContext2();(sc2);("key2");4.類圖:FinCommand 1-tun ; Fun二 Ufh* apeno vod ciosft 0 vodLiflhr4 apen 0 . void* close 0 . voidLightCornmand-hght . Light, execute() .me實現代碼:public class Switch private AbstractCommand abstractCommand;public vo
22、id setComman(AbstractCommand abstractCommand) =abstractCommand;public void open() ();public void close() ();public abstract class Abstractcommand public abstract void open();public abstract void close();public class FunCommand extends Abstractcommand private Fun fun = new Fun();public void open() ()
23、;public void close() ();private Light light = new Light();public void open() ();public void close() ();public class Fun public void open() " 開風扇");public void close() "關風扇");Light .javapublic class Light public void open() "開燈)public void close() 關燈)public class Client publi
24、c static void main(String口 args)Switch s = new Switch();Abstractcommand ac;ac = (AbstractCommand)();(ac);();();5.類圖:atHEradCornrTBnd 4 1 rftrlC*minandnare* CIICHO* MMuM例E憧悵口* satCammand (芭 KI祀tCjrrrend ah&adConiiniandf rTKniflemlJSt Airayljst4 idMenuAem (IJfefiLtan menJfeni.ivn出_* nmMliani*mh*fe
25、nulAnimmitemii .void 口oshi與Tkn 0jarcj:STPs=q ejuecute H Qdan ngAJtJffl-adConTWKi abstract!.w»dd* esecUH 0 voidFdirCDmrTurirl口Nl 心 mmendboartJSciwi BtwdS口m* 口詢 0 void* crealt il事 edrt 力boardSoeen , BoartiSoeefi * execute l) voidBoardScreen實現代碼:import class Menu public ArrayList<MenuItem> m
26、enuItemList = new ArrayList<MenuItem>();public void addMenuItem(MenuItem menuItem) (menuItem);+ "功能加入主菜單");public void removeMenuItem(MenuItem menuItem) (menuItem);+ "功能從主菜單中移除");public class MenuItem private String name;public AbstractCommand abstractCommand;public void click() ();public MenuItem(String name) =name;public void setCommand(AbstractCommand abstractcommand) =abstractcommand;public String getName() return name;AbstractCommand .javapublic abstract cl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游客運企業文化建設與團隊精神考核試卷
- 生活初二語文滿分作文
- 女媧補天初二語文作文
- 媽媽做飯的初三語文作文
- 礦石開采的環境保護與生態建設考核試卷
- 電能表的電網能效提升技術發展策略研究考核試卷
- 市場調查在人力資源行業的應用考核試卷
- 稀土金屬壓延加工質量成本控制方法考核試卷
- 漁業與食品安全體系的協同管理考核試卷
- 竹材物理性能與加工適應性研究考核試卷
- 鐵粉運輸合同協議
- 廣東省珠海市2024-2025學年七年級下學期期中考試英語試題(無答案)
- 2024年中國南水北調集團水網發展研究有限公司招聘考試真題
- (四調)武漢市2025屆高中畢業生四月調研考試 語文試卷(含答案詳解)
- 廣州廣州市天河區華陽小學-畢業在即家校共話未來-六下期中家長會【課件】
- 第4單元 亮火蟲(教學設計)-2024-2025學年粵教花城版(2024)音樂一年級下冊
- 車間生產材料管理制度
- 2023年鄭州鐵路職業技術學院單招職業技能考試題庫及答案1套
- 2025年融媒體中心招聘考試筆試試題(60題)附答案
- 湖南省2025屆高三“一起考”大聯考(模擬二)語文試題及參考答案
- 西師大版小學五年級數學(下)期中測試題(含答案)
評論
0/150
提交評論