軟件設(shè)計(jì)模式大作業(yè)樣例.doc_第1頁
軟件設(shè)計(jì)模式大作業(yè)樣例.doc_第2頁
軟件設(shè)計(jì)模式大作業(yè)樣例.doc_第3頁
軟件設(shè)計(jì)模式大作業(yè)樣例.doc_第4頁
軟件設(shè)計(jì)模式大作業(yè)樣例.doc_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

設(shè)計(jì)模式大作業(yè)課程名稱: 軟件設(shè)計(jì)模式 設(shè)計(jì)題目:公司經(jīng)費(fèi)申請 院 系: 計(jì)算機(jī)科學(xué)與信息工程學(xué)院 學(xué)生姓名: 學(xué) 號(hào): 專業(yè)班級(jí): 軟件工程13-1 指導(dǎo)教師: 高 原 2016年6月軟 件 設(shè) 計(jì) 模 式 任 務(wù) 書設(shè)計(jì)題目公司經(jīng)費(fèi)申請學(xué)生姓名 所在院系計(jì)算機(jī)科學(xué)與信息工程學(xué)院專業(yè)、年級(jí)、班軟件工程13-1設(shè)計(jì)要求:1設(shè)計(jì)一個(gè)應(yīng)用場景,最少使用所學(xué)過的三種設(shè)計(jì)模式解決一個(gè)實(shí)際問題。一人一題,不可重復(fù)。2應(yīng)用場景設(shè)計(jì)要合理,模式選擇要適當(dāng)。3要求給出系統(tǒng)模式結(jié)構(gòu)圖,主要類的設(shè)計(jì)代碼。4編寫驗(yàn)證程序,在驗(yàn)證程序中要在顯著位置顯示個(gè)人信息。學(xué)生應(yīng)完成的工作:1. 應(yīng)用場景:公司經(jīng)費(fèi)申請,可以了解申請經(jīng)費(fèi)的具體流程,由申請人先填寫申請單,然后交給領(lǐng)導(dǎo)審批,如果申請批準(zhǔn)下來,領(lǐng)導(dǎo)會(huì)通知申請人審批通過,然后申請人去財(cái)務(wù)領(lǐng)取費(fèi)用,如果沒有批準(zhǔn)下來,領(lǐng)導(dǎo)會(huì)通知申請人審批未通過。不同級(jí)別的領(lǐng)導(dǎo),對于審批的額度是不一樣的,比如,項(xiàng)目經(jīng)理只能審批500元以內(nèi)的申請;部門經(jīng)理能審批1000元以內(nèi)的申請;而總經(jīng)理可以審核3000元以內(nèi)的申請,否則不通過。2. 設(shè)計(jì)模式:模板方法模式,職責(zé)鏈模式,觀察者模式。 (1)模板方法模式:定義了一個(gè)操作中算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。 (2)職責(zé)鏈模式:不同級(jí)別的領(lǐng)導(dǎo),對于審批的額度不一樣,使其各自的職責(zé)權(quán)限更加清晰明了。 (3)觀察者模式:一個(gè)對象狀態(tài)發(fā)生改變時(shí),其相應(yīng)依賴對象得到通知并自動(dòng)更新。3. 實(shí)現(xiàn)代碼: 使用java語言實(shí)現(xiàn)所有功能。參考文獻(xiàn)閱讀:1 徐宏喆,侯迪等編著,實(shí)用軟件設(shè)計(jì)模式教程M,清華大學(xué)出版社。2 顏炯編著,C#設(shè)計(jì)模式M,中國電力出版社。3 程杰,大話設(shè)計(jì)模式,北京:機(jī)械工業(yè)出版社,2008。4 設(shè)計(jì)模式可復(fù)用面向?qū)ο筌浖幕A(chǔ),北京:機(jī)械工業(yè)出版社。5 美Alan Shalloway著,設(shè)計(jì)模式精解M,清華大學(xué)出版社。工作計(jì)劃:1. 審題,查閱資料,進(jìn)行設(shè)計(jì)前的必要資料準(zhǔn)備(3天)。2. 把程序完整運(yùn)行出來(4天)。3. 增加改進(jìn)程序(3天)。4. 寫課程設(shè)計(jì)報(bào)告(3天)。5. 提交課程設(shè)計(jì)報(bào)告(1天)。任務(wù)下達(dá)日期: 2015 年 6 月 9 日 任務(wù)完成日期: 2015 年 6 月 22 日指導(dǎo)教師(簽名): 高原 學(xué)生(簽名): 代小雪目錄一、 系統(tǒng)目標(biāo)11. 設(shè)計(jì)目的12. 需求描述1二、系統(tǒng)模塊選擇11. 需求分析12. 選用設(shè)計(jì)模式2(1)模板方法模式2(2)職責(zé)鏈模式2(3)觀察者模式3三、 系統(tǒng)設(shè)計(jì)41. 系統(tǒng)功能模塊設(shè)計(jì)4四、 系統(tǒng)實(shí)現(xiàn)51.模板方法模塊及其實(shí)現(xiàn)類52.職責(zé)鏈模塊及其實(shí)現(xiàn)類63.觀察者模塊及其實(shí)現(xiàn)類94.事件處理程序10五、 系統(tǒng)設(shè)計(jì)總結(jié)111. 實(shí)現(xiàn)的功能和優(yōu)點(diǎn)112. 不足之處123. 完成心得12六、 參考文獻(xiàn)12參考文獻(xiàn)121、 系統(tǒng)目標(biāo)1. 設(shè)計(jì)目的通過本課程設(shè)計(jì),加深對軟件設(shè)計(jì)課程的理解,熟練掌握和鞏固所學(xué)的各種設(shè)計(jì)模式,培養(yǎng)自我動(dòng)手、查閱技術(shù)文獻(xiàn)、資料、手冊以及編寫技術(shù)文獻(xiàn)的能力。通過運(yùn)用設(shè)計(jì)模式來解決實(shí)際系統(tǒng)中遇到的問題,從而具備利用計(jì)算機(jī)編程分析解決綜合性實(shí)際問題的初步能力。2. 需求描述 本系統(tǒng)的主要目的在與應(yīng)用設(shè)計(jì)模式解決公司經(jīng)費(fèi)申請問題,可以了解申請經(jīng)費(fèi)的具體流程為申請人先填寫申請單,然后交給領(lǐng)導(dǎo)審批,如果申請批準(zhǔn)下來,領(lǐng)導(dǎo)會(huì)通知申請人審批通過,然后申請人去財(cái)務(wù)領(lǐng)取費(fèi)用,財(cái)務(wù)部給于其撥款,如果沒有批準(zhǔn)下來,領(lǐng)導(dǎo)會(huì)通知申請人審批未通過。不同級(jí)別的領(lǐng)導(dǎo),對于審批的額度是不一樣的,比如,項(xiàng)目經(jīng)理只能審批500元以內(nèi)的申請;部門經(jīng)理能審批1000元以內(nèi)的申請;而總經(jīng)理可以審核3000元以內(nèi)的申請,否則不通過。系統(tǒng)中總共用到三種設(shè)計(jì)模式,分別是模板方法模式,職責(zé)鏈模式,觀察者模式。 模板方法模式定義了一個(gè)操作中算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。申請經(jīng)費(fèi)的具體流程是固定的,寫申請單,審核,得到通知這三個(gè)過程,只是審核過程不同。職責(zé)鏈模式鑒于不同級(jí)別的領(lǐng)導(dǎo),對于審批的額度是不一樣,使其各自的職責(zé)權(quán)限更加清晰明了。觀察者模式是一種一對多依賴關(guān)系,一個(gè)對象狀態(tài)發(fā)生改變時(shí),其相應(yīng)依賴對象得到通知并自動(dòng)更新。二、 系統(tǒng)模塊選擇1. 需求分析根據(jù)問題的描述,可以確定系統(tǒng)的大致業(yè)務(wù)邏輯。如下:需要申請活動(dòng)費(fèi)用,按照固定工作流程進(jìn)行申請,給出申請金額,由領(lǐng)導(dǎo)根據(jù)各自的職責(zé)權(quán)限進(jìn)行審核,并將結(jié)果告知申請人,財(cái)務(wù)部根據(jù)結(jié)果給予撥款。將結(jié)果返回到客戶端,呈現(xiàn)給用戶。2. 選用設(shè)計(jì)模式根據(jù)需求分析,該公司經(jīng)費(fèi)申請可以采用到三種設(shè)計(jì)模式,分別是模板方法模式,職責(zé)鏈模式,觀察者模式。(1) 模板方法模式采用模板方法模式的原因是它定義了一個(gè)操作中算法的骨架,而將一些步驟延遲到子類中,使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。公司申請活動(dòng)經(jīng)費(fèi)的流程是固定的,由申請人先填寫申請單,然后交給領(lǐng)導(dǎo)審批,最后得到審批結(jié)果,作出相應(yīng)行動(dòng)。用模板方法模式使其結(jié)構(gòu)清晰,提高了代碼的復(fù)用性。模式結(jié)構(gòu)圖如圖1-1:圖1-1 模板方法模式結(jié)構(gòu)圖(2)職責(zé)鏈模式采用職責(zé)鏈模式的主要原因是對于審核經(jīng)費(fèi)申請單,由上級(jí)領(lǐng)導(dǎo)進(jìn)行處理,而不同級(jí)別的領(lǐng)導(dǎo),對于審批的額度是不一樣的。職責(zé)鏈模式避免請求發(fā)送者和接收者耦合在一起,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。這樣降低了耦合度,簡化對象的相互連接,增強(qiáng)給對象指派職責(zé)的靈活性。模式結(jié)構(gòu)圖如圖1-2:圖1-2職責(zé)鏈模式結(jié)構(gòu)圖(3)觀察者模式采用觀察者模式的主要原因是可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,并定義可穩(wěn)定的消息更新傳遞機(jī)制,抽象了更新接口。在觀察目標(biāo)和觀察者之間建立一個(gè)抽象的耦合。模式結(jié)構(gòu)圖如圖1-3:圖1-3觀察者模式結(jié)構(gòu)圖3、 系統(tǒng)設(shè)計(jì)1. 系統(tǒng)功能模塊設(shè)計(jì)根據(jù)需求分析,公司經(jīng)費(fèi)申請可分為三個(gè)模塊,主要如下:u 申請人填寫經(jīng)費(fèi)申請單:向上級(jí)領(lǐng)導(dǎo)提交申請。u 領(lǐng)導(dǎo)審核:根據(jù)職責(zé)權(quán)限不同,按各自的管理范圍一一送派審核。u 收到審核結(jié)果通知:收到上級(jí)領(lǐng)導(dǎo)對經(jīng)費(fèi)申請單批準(zhǔn)與否的信息。 公司經(jīng)費(fèi)申請?zhí)顚懡?jīng)費(fèi)申請單領(lǐng)導(dǎo)審核收到審核結(jié)果圖2-1 公司經(jīng)費(fèi)申請模塊4、 系統(tǒng)實(shí)現(xiàn)1. 模板方法模式和其實(shí)現(xiàn)類模板方法模式貫穿在整個(gè)系統(tǒng)中,公司經(jīng)費(fèi)申請由三個(gè)具體部分組成,填寫申請單,經(jīng)領(lǐng)導(dǎo)審批,最后接收到通知。模板方法模式貫穿整個(gè)工作模塊,實(shí)現(xiàn)代碼如下:public abstract class ApplicationForFunds public void apply()System.out.println(填寫申請單);public abstract void toExamine();public void evaluate()System.out.println(得到通知); public void process() this.apply(); this.toExamine(); this.evaluate(); public class ActivityFund extends ApplicationForFundspublic void toExamine()System.out.println(活動(dòng)經(jīng)費(fèi));public class ProjectFund extends ApplicationForFundspublic void toExamine()System.out.println(項(xiàng)目經(jīng)費(fèi));2. 職責(zé)鏈模式和其實(shí)現(xiàn)類職責(zé)鏈模式避免請求發(fā)送者和接收者耦合在一起,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。主要解決的是上級(jí)領(lǐng)導(dǎo)中的那個(gè)具體人來實(shí)現(xiàn)審核工作。職責(zé)鏈模式來完成領(lǐng)導(dǎo)審核模塊,實(shí)現(xiàn)代碼如下:public abstract class Leaderprotected String name;protected Leader successor;public Leader(String name)=name;public void setSuccessor(Leader successor)this.successor=successor;public abstract void handleRequest(Funts request);public class DivisionManager extends Leaderpublic DivisionManager(String name)super(name);public void handleRequest(Funts request)if(request.getMoney()1000)System.out.println(部門經(jīng)理 + name + 審批 + request.getReplyName() + 員工的活動(dòng)經(jīng)費(fèi),經(jīng)費(fèi)為 + request.getMoney() + 元??扇ヘ?cái)務(wù)部領(lǐng)取費(fèi)用。);elseif(this.successor!=null)this.successor.handleRequest(request);public class GeneralManager extends Leaderpublic GeneralManager(String name)super(name);public void handleRequest(Funts request)if(request.getMoney()3000)System.out.println(總經(jīng)理 + name + 審批員工 + request.getReplyName() + 員工的活動(dòng)經(jīng)費(fèi),經(jīng)費(fèi)為 + request.getMoney() + 元??扇ヘ?cái)務(wù)部領(lǐng)取費(fèi)用。);elseSystem.out.println( request.getReplyName() + 員工的活動(dòng)經(jīng)費(fèi)為 + request.getMoney() + 元,由于其經(jīng)費(fèi)要求太高將不予批準(zhǔn)!);public class ProjectManager extends Leader public ProjectManager(String name)super(name);public void handleRequest(Funts request)if(request.getMoney()500)System.out.println(項(xiàng)目經(jīng)理 + name + 審批 + request.getReplyName() + 員工的活動(dòng)經(jīng)費(fèi),經(jīng)費(fèi)為 + request.getMoney() + 元??扇ヘ?cái)務(wù)部領(lǐng)取費(fèi)用。);elseif(this.successor!=null)this.successor.handleRequest(request);public class Funtsprivate String replyName;private int money;public Funts(String replyName,int money)this.replyName=replyName;this.money=money;public void setReplyName(String replyName) this.replyName = replyName; public void setMoney(int money) this.money = money; public String getReplyName() return (this.replyName); public int getMoney() return (this.money); 3. 觀察者模式和其實(shí)現(xiàn)類觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,并定義可穩(wěn)定的消息更新傳遞機(jī)制,抽象了更新接口。在觀察目標(biāo)和觀察者之間建立一個(gè)抽象的耦合。觀察者模式來完成接收到審核通知模塊,實(shí)現(xiàn)代碼如下:import java.util.*;public abstract class MySubjectprotected ArrayList observers = new ArrayList();/注冊方法public void attach(MyObserver observer)observers.add(observer); /注銷方法public void detach(MyObserver observer)observers.remove(observer);public abstract void pass(); /抽象通知方法public interface MyObservervoid response(); /抽象響應(yīng)方法public class Check extends MySubjectpublic void pass()System.out.println(審核通過!);System.out.println(-);for(Object obs:observers)(MyObserver)obs).response();public class ApplyPeople implements MyObserverpublic void response()System.out.println(申請人去財(cái)務(wù)部領(lǐng)取資金!);public class GiveFunt implements MyObserverpublic void response()System.out.println(財(cái)務(wù)部撥給申請人相應(yīng)資金!);4. 事件處理程序事件處理程序的代碼如下:public class Clientpublic static void main(String a)Leader objProjectManager,objDivisionManager,objGeneralManager;ApplicationForFunds bank;bank=(ApplicationForFunds)XMLUtil.getBean();cess();System.out.println(-);objProjectManager=new ProjectManager(王明);objDivisionManager=new DivisionManager(趙強(qiáng));objGeneralManager=new GeneralManager(李波);objProjectManager.setSuccessor(objDivisionManager);objDivisionManager.setSuccessor(objGeneralManager);Funts lr1=new Funts(第一小組,450);objProjectManager.handleRequest(lr1);Funts lr2=new Funts(第二小組,3200);objProjectManager.handleRequest(lr2);Funts lr3=new Funts(第三小組,1500);objProjectManager.handleRequest(lr3);Funts lr4=new Funts(第四小組,900);objProjectManager.handleRequest(lr4);MySubject subject=new Check();MyObserver obs1,obs2,obs3;obs1=new GiveFunt();obs2=new GiveFunt();obs3=new ApplyPeople();subject.attach(obs1);subject.attach(obs2);subject.attach(obs3);subject.pass();5、 系統(tǒng)設(shè)計(jì)總結(jié)1. 實(shí)現(xiàn)的功能和優(yōu)點(diǎn)該公司經(jīng)費(fèi)申請主要實(shí)現(xiàn)的是公司經(jīng)費(fèi)申請的具體流程和實(shí)現(xiàn)過程,運(yùn)用到的設(shè)計(jì)模式有模板方法模式,職責(zé)鏈模式和觀察者模式。職責(zé)鏈模式根據(jù)審核經(jīng)費(fèi)申請單經(jīng)費(fèi)的多少,由不同級(jí)別的領(lǐng)導(dǎo)進(jìn)行審批。觀察者模式可以實(shí)現(xiàn)表示層和數(shù)據(jù)邏輯層的分離,并定義可穩(wěn)定的消息更新傳遞機(jī)制,抽象了更新接口。模板方法模式為整個(gè)業(yè)務(wù)流程應(yīng)用的該模式,客戶端只需訪問,而無需知道具體如何實(shí)現(xiàn)。該管理系統(tǒng)的優(yōu)點(diǎn)就是代碼的復(fù)用率很高,合理的運(yùn)用了這三種設(shè)計(jì)模式,各個(gè)模塊的層

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論