




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、LOGO設(shè)計(jì)模式設(shè)計(jì)模式(Design Pattern) 張凱 副教授計(jì)算機(jī)學(xué)院 軟件工程系武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem)v加薪、請(qǐng)假非要老總批? 每級(jí)領(lǐng)導(dǎo)都有一定限度的權(quán)利,對(duì)待申請(qǐng),需判斷是否有權(quán)來(lái)決策 經(jīng)理可以批2天以下請(qǐng)假,如果沒(méi)權(quán)利,向總監(jiān)上報(bào) 總監(jiān)可以批5天以下請(qǐng)假,如果沒(méi)權(quán)利,向總經(jīng)理上報(bào)武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem) class Request /申請(qǐng) /申請(qǐng)類(lèi)別 private string requestType; public string RequestType get return requestType; set
2、requestType = value; /申請(qǐng)內(nèi)容 private string requestContent; public string RequestContent get return requestContent; set requestContent = value; /數(shù)量 private int number; public int Number get return number; set number = value; 武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem) class Manager protected string name; public Mana
3、ger(string name) = name; public void GetResult(ManagerLevel managerLevel, Request request) if (managerLevel = ManagerLevel.經(jīng)理) if (request.RequestType = 請(qǐng)假 & request.Number = 2) Console.WriteLine(0:1 數(shù)量2 被批準(zhǔn), name, request.RequestContent, request.Number); else Console.WriteLine(0:1 數(shù)量2
4、 我無(wú)權(quán)處理, name, request.RequestContent, request.Number); else if (managerLevel = ManagerLevel.總監(jiān)) if (request.RequestType = 請(qǐng)假 & request.Number = 5) Console.WriteLine(0:1 數(shù)量2 被批準(zhǔn), name, request.RequestContent, request.Number); else Console.WriteLine(0:1 數(shù)量2 我無(wú)權(quán)處理, name, request.RequestContent, req
5、uest.Number); else if (managerLevel = ManagerLevel.總經(jīng)理) if (request.RequestType = 請(qǐng)假) Console.WriteLine(0:1 數(shù)量2 被批準(zhǔn), name, request.RequestContent, request.Number); else if (request.RequestType = 加薪 & request.Number 500) Console.WriteLine(0:1 數(shù)量2 再說(shuō)吧, name, request.RequestContent, request.Number)
6、; 武漢科技大學(xué)問(wèn)題問(wèn)題(Problem)(Problem) static void Main(string args) Manager jinli = new Manager(金利); Manager zongjian = new Manager(宗劍); Manager zhongjingli = new Manager(鐘精勵(lì)); Request request = new Request(); request.RequestType = 加薪; request.RequestContent = 張三請(qǐng)求加薪; request.Number = 1000; jinli.GetResult
7、(ManagerLevel.經(jīng)理, request); zongjian.GetResult(ManagerLevel.總監(jiān), request); zhongjingli.GetResult(ManagerLevel.總經(jīng)理, request); Request request2 = new Request(); request2.RequestType = 請(qǐng)假; request2.RequestContent = 張三請(qǐng)假; request2.Number = 3; jinli.GetResult(ManagerLevel.經(jīng)理, request2); zongjian.GetResult
8、(ManagerLevel.總監(jiān), request2); zhongjingli.GetResult(ManagerLevel.總經(jīng)理, request2); Console.Read(); 武漢科技大學(xué)主要內(nèi)容主要內(nèi)容模式動(dòng)機(jī)與定義1模式結(jié)構(gòu)與分析2模式實(shí)例與解析3模式效果與應(yīng)用4武漢科技大學(xué)v模式動(dòng)機(jī) 模式名稱(chēng):職責(zé)鏈模式(Chain of Responsibility) 職責(zé)鏈可以是一條直線、一個(gè)環(huán)或者一個(gè)樹(shù)形結(jié)構(gòu),最常見(jiàn)的職責(zé)鏈?zhǔn)侵本€型,即沿著一條單向的鏈來(lái)傳遞請(qǐng)求。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)
9、武漢科技大學(xué)v模式動(dòng)機(jī) 鏈上的每一個(gè)對(duì)象都是請(qǐng)求處理者,職責(zé)鏈模式可以將請(qǐng)求的處理者組織成一條鏈,并使請(qǐng)求沿著鏈傳遞,由鏈上的處理者對(duì)請(qǐng)求進(jìn)行相應(yīng)的處理。 客戶端無(wú)須關(guān)心請(qǐng)求的處理細(xì)節(jié)以及請(qǐng)求的傳遞,只需將請(qǐng)求發(fā)送到鏈上即可,將請(qǐng)求的發(fā)送者和請(qǐng)求的處理者解耦。這就是職責(zé)鏈模式的模式動(dòng)機(jī)。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)v模式定義 職責(zé)鏈模式(Chain of Responsib
10、ility Pattern):避免請(qǐng)求發(fā)送者與接收者耦合在一起,讓多個(gè)對(duì)象都有可能接收請(qǐng)求,將這些對(duì)象連接成一條鏈,并且沿著這條鏈傳遞請(qǐng)求,直到有對(duì)象處理它為止。職責(zé)鏈模式又稱(chēng)為責(zé)任鏈模式,它是一種對(duì)象行為型模式。武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility) /申請(qǐng) class Request /申請(qǐng)類(lèi)別 private string requestType; public s
11、tring RequestType get return requestType; set requestType = value; /申請(qǐng)內(nèi)容 private string requestContent; public string RequestContent get return requestContent; set requestContent = value; /數(shù)量 private int number; public int Number get return number; set number = value; 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Respo
12、nsibility)(Chain of Responsibility) /管理者 abstract class Manager protected string name; /管理者的上級(jí) protected Manager superior; public Manager(string name) = name; /設(shè)置管理者的上級(jí) public void SetSuperior(Manager superior) this.superior = superior; /申請(qǐng)請(qǐng)求 abstract public void RequestApplications(Reques
13、t request); 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility) class CommonManager : Manager /經(jīng)理 public CommonManager(string name) : base(name) public override void RequestApplications(Request request) if (request.RequestType = 請(qǐng)假 & request.Number = 2) Console.WriteLine(0:1 數(shù)量2 被
14、批準(zhǔn), name, request.RequestContent, request.Number); else if (superior != null) superior.RequestApplications(request); 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility) class Majordomo : Manager /總監(jiān) public Majordomo(string name) : base(name) public override void RequestApplications(Re
15、quest request) if (request.RequestType = 請(qǐng)假 & request.Number = 5) Console.WriteLine(0:1 數(shù)量2 被批準(zhǔn), name, request.RequestContent, request.Number); else if (superior != null) superior.RequestApplications(request); 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility) class GeneralManage
16、r : Manager /總經(jīng)理 public GeneralManager(string name) : base(name) public override void RequestApplications(Request request) if (request.RequestType = 請(qǐng)假) Console.WriteLine(0:1 數(shù)量2 被批準(zhǔn), name, request.RequestContent, request.Number); else if (request.RequestType = 加薪 & request.Number 500) Console.W
17、riteLine(0:1 數(shù)量2 再說(shuō)吧, name, request.RequestContent, request.Number); 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility) static void Main(string args) CommonManager jinli = new CommonManager(金利); Majordomo zongjian = new Majordomo(宗劍); GeneralManager zhongjingli = new GeneralManager(鐘
18、精勵(lì)); jinli.SetSuperior(zongjian); zongjian.SetSuperior(zhongjingli); Request request = new Request(); request.RequestType = 請(qǐng)假; request.RequestContent = 張三請(qǐng)假; request.Number = 1; jinli.RequestApplications(request); Request request3 = new Request(); request3.RequestType = 加薪; request3.RequestContent
19、= 張三請(qǐng)求加薪; request3.Number = 500; jinli.RequestApplications(request3); Console.Read(); 武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)靈活在哪?如果項(xiàng)目經(jīng)理不在,代碼如何寫(xiě)?1. 改變內(nèi)部的傳遞規(guī)則。2. 可以從職責(zé)鏈任何一關(guān)開(kāi)始。武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Respons
20、ibility)(Chain of Responsibility) static void Main(string args) CommonManager jinli = new CommonManager(金利); / Majordomo zongjian = new Majordomo(宗劍); GeneralManager zhongjingli = new GeneralManager(鐘精勵(lì)); jinli.SetSuperior(zhongjingli); / zongjian.SetSuperior(zhongjingli); Request request = new Requ
21、est(); request.RequestType = 請(qǐng)假; request.RequestContent = 張三請(qǐng)假; request.Number = 1; jinli.RequestApplications(request); Request request3 = new Request(); request3.RequestType = 加薪; request3.RequestContent = 張三請(qǐng)求加薪; request3.Number = 500; jinli.RequestApplications(request3); Console.Read(); 武漢科技大學(xué)職責(zé)鏈
22、模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)v模式結(jié)構(gòu) 職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)v參與者 Handler: 抽象處理者 ConcreteHandler: 具體處理者 Client: 客戶類(lèi)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of
23、Responsibility)一個(gè)職責(zé)鏈可以是一條線,一個(gè)樹(shù),也可以是一個(gè)環(huán)。如上圖所示,責(zé)任鏈?zhǔn)且粋€(gè)樹(shù)結(jié)構(gòu)的一部分。武漢科技大學(xué)v職責(zé)鏈模式和狀態(tài)模式比較 職責(zé)鏈模式:當(dāng)客戶提交一個(gè)請(qǐng)求時(shí),請(qǐng)求是沿鏈傳遞直至有一個(gè)ConcreteHander對(duì)象負(fù)責(zé)處理它。鏈中的對(duì)象自己并不知道鏈的結(jié)構(gòu),在運(yùn)行時(shí)確定。結(jié)果是職責(zé)鏈可簡(jiǎn)化對(duì)象的相互連接,它們僅需保持一個(gè)指向其后繼者的引用或指針,而不需要保持它所有的候選接受者。這也就大大降低了耦合度了。也就是說(shuō),我們可以隨時(shí)地增加或修改處理一個(gè)請(qǐng)求的結(jié)構(gòu)。增強(qiáng)了給對(duì)象指派職責(zé)的靈活性。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Ch
24、ain of Responsibility)武漢科技大學(xué)v職責(zé)鏈模式和狀態(tài)模式比較 狀態(tài)模式:狀態(tài)模式主要解決的是當(dāng)控制一個(gè)對(duì)象狀態(tài)轉(zhuǎn)換的條件表達(dá)式過(guò)于復(fù)雜的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類(lèi)當(dāng)中,可以把復(fù)雜的判斷邏輯簡(jiǎn)化。定義新的子類(lèi)可以很容易地增加新的狀態(tài)和轉(zhuǎn)換。這樣做的目的是為了消除龐大的條件分支語(yǔ)句。狀態(tài)模式通過(guò)把各種狀態(tài)轉(zhuǎn)移邏輯分布到State的子類(lèi)之間,來(lái)減少相互間的依賴。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)v職責(zé)鏈模式和狀態(tài)模式比較 請(qǐng)假例子,找班長(zhǎng)請(qǐng)假,班長(zhǎng)只能請(qǐng)半天
25、,否則班長(zhǎng)向老師申請(qǐng),如果請(qǐng)假時(shí)間超過(guò)一周,老師要跟副年級(jí)主任請(qǐng)示,如果請(qǐng)假超出一個(gè)月,主任要跟年級(jí)正主任請(qǐng)示,然后被批準(zhǔn),或不被批準(zhǔn)。 問(wèn)題:如果班長(zhǎng)請(qǐng)假了,用狀態(tài)模式,其他學(xué)生都請(qǐng)不了假了,也就是如果狀態(tài)模式中任何一環(huán)缺失的話,這個(gè)事件都無(wú)法進(jìn)行下去。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)v職責(zé)鏈模式和狀態(tài)模式比較 職責(zé)鏈模式的鏈?zhǔn)皆诳蛻舳诉B接的,也就是說(shuō),如果我們請(qǐng)假,請(qǐng)假制度一旦改變,比如說(shuō)我們不需要班長(zhǎng),或者是先請(qǐng)求老師后直接請(qǐng)求主任或者中間多了一個(gè)環(huán)節(jié),都是很容易實(shí)現(xiàn)的,所以,職責(zé)鏈模式要比狀態(tài)模式靈活很多。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Responsibility)武漢科技大學(xué)v職責(zé)鏈模式和狀態(tài)模式比較 職責(zé)鏈模式與狀態(tài)模式的最大的不同是設(shè)置自己的下一級(jí)的問(wèn)題上,狀態(tài)模式是在類(lèi)的設(shè)計(jì)階段就定好的,不能在客戶端改變,而職責(zé)鏈的下一級(jí)是在客戶端自己來(lái)確定的。 職責(zé)鏈模式注重職責(zé)的傳遞,由客戶端配置;狀態(tài)模式注重對(duì)象狀態(tài)的轉(zhuǎn)換,轉(zhuǎn)換過(guò)程對(duì)客戶端是透明的。職責(zé)鏈模式職責(zé)鏈模式(Chain of Responsibility)(Chain of Respons
溫馨提示
- 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年提供施工設(shè)備服務(wù)項(xiàng)目申請(qǐng)報(bào)告模板
- 【北?!?025年廣西北海市合浦縣委政法委招聘31人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 攝影入門(mén)化妝教學(xué)課件
- 指導(dǎo)型教學(xué)課件
- 敬隊(duì)禮班會(huì)課件
- 法學(xué)概論課件-民法部分
- 識(shí)字教學(xué)小學(xué)課件
- 教育部公布人工智能課件
- 2025年中國(guó)旅游研究院(文化和旅游部數(shù)據(jù)中心)招聘工作人員1人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 【溫州】2025年浙江溫州市龍灣區(qū)市場(chǎng)監(jiān)督管理局招聘3人筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 廣東省茂名市2023-2024學(xué)年高一下學(xué)期7月期末考試 政治 含解析
- 2025-2030年中國(guó)氯化聚醚行業(yè)市場(chǎng)現(xiàn)狀分析及前景趨勢(shì)調(diào)研報(bào)告
- 2025年中智科技集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2023-2024學(xué)年人教(新起點(diǎn))英語(yǔ)四年級(jí)下冊(cè)期末綜合素質(zhì)模擬測(cè)試題(含答案含聽(tīng)力原文)
- 經(jīng)濟(jì)學(xué)基礎(chǔ)-西方經(jīng)濟(jì)學(xué) 網(wǎng)考題庫(kù)
- 公路安全監(jiān)理細(xì)則(3篇)
- 品管圈PDCA改善案例-呼吸科提高住院患者痰標(biāo)本送檢合格率
- 鼻窒課件教學(xué)課件
- 健身教練獨(dú)立承包協(xié)議(2024年版)
- 職場(chǎng)溝通:職場(chǎng)溝通與人際關(guān)系處理(山東管理學(xué)院)知到智慧樹(shù)章節(jié)答案
- 商業(yè)步行街物業(yè)管理方案
評(píng)論
0/150
提交評(píng)論