日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

37职责链模式(Chain of Responsibility Pattern)

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 37职责链模式(Chain of Responsibility Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動機(Motivate):
??? 在軟件構建過程中,一個請求可能被多個對象處理,但是每個請求在運行時只能有一個接受者,如果顯示指定,將必不可少地帶來請求發送者與接受者的緊耦合。
??? 如何使請求的發送者不需要指定具體的接受者?讓請求的接受者自己在運行時決定來處理請求,從而使兩者解耦。
意圖(Intent):
??? 使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個對象處理它為止。
結構圖(Struct):
??? ?? ?? ???

適用性:
??? 1.有多個對象可以處理一個請求,哪個對象處理該請求運行時刻自動確定。
??? 2.你想在不明確接收者的情況下,向多個對象中的一個提交一個請求。
??? 3.可處理一個請求的對象集合應被動態指定。
生活中的例子:
??? ???????????

代碼實現:
??? ?? ???

?1?????//Handler
?2????abstract?class?Approver
?3?????{
?4????????protected?Approver?successor;
?5????????public?void?SetSuccessor(Approver?successor)
?6????????{
?7????????????this.successor?=?successor;
?8????????}
?9????????public?abstract?void?ProcessRequest(Purchase?purchase);
10?
11?????}
12?
13?
14?

?

?1?????//ConcreteHandler
?2?????class?Director?:Approver
?3?????{
?4?????????public?override?void?ProcessRequest(Purchase?purchase)
?5?????????{
?6?????????????if?(purchase.Amount?<?10000.0)
?7?????????????{
?8?????????????????Console.WriteLine("{0}?approved?request#?{1}",?this.GetType().Name,?purchase.Number);
?9?
10?????????????}
11?????????????else?if(successor?!=null)
12?????????????{
13?????????????????successor.ProcessRequest(purchase);
14?????????????}
15?????????}
16?????}

?

?1?
?2?
?3?
?4?????class?VicePresident?:Approver
?5?????{
?6?????????public?override?void?ProcessRequest(Purchase?purchase)
?7?????????{
?8?????????????if?(purchase.Amount?<?25000.0)
?9?????????????{
10?????????????????Console.WriteLine("{0}?approved?request#?{1}",?this.GetType().Name,?purchase.Number);
11?
12?????????????}
13?????????????else?if?(successor?!=?null)
14?????????????{
15?????????????????successor.ProcessRequest(purchase);
16?????????????}
17?????????}
18?????}

?

?1?
?2?????class?President?:Approver
?3?????{
?4?????????public?override?void?ProcessRequest(Purchase?purchase)
?5?????????{
?6?????????????if?(purchase.Amount?<?100000.0)
?7?????????????{
?8?????????????????Console.WriteLine("{0}?approved?request#?{1}",?this.GetType().Name,?purchase.Number);
?9?
10?????????????}
11?????????????else
12?????????????{
13?????????????????Console.WriteLine("Request!?{0}?requires?an?executive?meeting!",?purchase.Number);
14?????????????}
15?????????}
16?????}

?

?1?
?2?
?3?????//Request?details
?4?????class?Purchase
?5?????{
?6?????????private?int?number;
?7?????????private?double?amount;
?8?????????private?string?purpose;
?9?
10?????????//Constructor
11?????????public?Purchase(int?number,?double?amount,?string?purpose)
12?????????{
13?????????????this.number?=?number;
14?????????????this.amount?=?amount;
15?????????????this.purpose?=?purpose;
16?????????}
17?????????//Properties
18?????????public?double?Amount
19?????????{
20?????????????get?{?return?amount;?}
21?????????????set?{?amount?=?value;?}
22?????????}
23?????????public?string?Purpose
24?????????{
25?????????????get?{?return?purpose;?}
26?????????????set?{?purpose?=?value;?}
27?????????}
28?????????public?int?Number
29?????????{
30?????????????get?{?return?number;?}
31?????????????set?{?number?=?value;?}
32?????????}
33?????}


客戶端調用如下:

?1?
?2?????class?Program
?3?????{
?4?????????static?void?Main(string[]?args)
?5?????????{
?6?????????????//Setup?Chain?of?Responsibility
?7?????????????Director?Larry?=?new?Director();
?8?????????????VicePresident?Sam?=?new?VicePresident();
?9?????????????President?Tammy?=?new?President();
10?????????????Larry.SetSuccessor(Sam);
11?????????????Sam.SetSuccessor(Tammy);
12?
13?????????????//Generate?and?process?purchase?requests
14?????????????Purchase?p?=?new?Purchase(1034,?350.00,?"Supplies");
15?????????????Larry.ProcessRequest(p);
16?
17?????????????p?=?new?Purchase(2035,?32590.10,?"Project?X");
18?????????????Larry.ProcessRequest(p);
19?
20?????????????p?=?new?Purchase(2036,?122100.00,?"Project?Y");
21?????????????Larry.ProcessRequest(p);
22?
23?????????????//Wait?for?user
24?????????????Console.Read();
25?????????}
26?????}



運行結果如下:
??? ? ? ? ? ???

Chain of Responsibility實現要點:
??? 1.Chain of Responsibility模式的應用場合在于“一個請求可能有多個接受者,但是最后真正的接受者只胡一個”,只有這時候請求發送者與接受者的耦合才胡可能出現“變化脆弱”的癥狀,職責鏈的目的就是將二者解耦,從而更好地應對變化。
??? 2.應用了Chain of Responsibility模式后,對象的職責分派將更具靈活性。我們可以在運行時動態添加/修改請求的處理職責。
??? 3.如果請求傳遞到職責鏈的未尾仍得不到處理,應該有一個合理的缺省機制。這也是每一個接受對象的責任,而不是發出請求的對象的責任。

總結

以上是生活随笔為你收集整理的37职责链模式(Chain of Responsibility Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国外av在线| 国产一级久久久久毛片精品 | 久久精品在线免费观看 | 吃奶在线观看 | 欧美色悠悠 | 亚欧乱色 | 无码人妻丰满熟妇区五十路百度 | 性一交一黄一片 | 精品国产1区2区 | 欧美啪啪小视频 | 欧美性俱乐部 | 日本在线激情 | 91婷婷射| 亚洲美女屁股眼交3 | 国产精品无码毛片 | 夜夜天天 | 九九久视频| 一级片久久久久 | 亚洲高清不卡 | 日本成人毛片 | 久久偷看各类女兵18女厕嘘嘘 | jizz日韩 | 韩国三级hd中文字幕有哪些 | 琪琪色18 | 一级黄色美女视频 | 色综合久久88色综合天天6 | 国产一区二区免费 | 亚洲成人av | 五十路av在线 | 中文字幕最新 | 99riav3国产精品视频 | 午夜黄色网 | 日韩欧美在线视频免费观看 | 午夜av一区二区 | 做爰视频毛片视频 | 欧美成人激情在线 | 性欧美18—19sex性高清 | 精品国产一级 | 日韩不卡一二区 | 国产xxxxx | 草草影院一区二区三区 | 日韩一区二区a片免费观看 伊人网综合在线 | 日韩性网站 | 一区二区三区日韩欧美 | 精品人妻一区二区三区日产乱码 | 日本中文字幕在线不卡 | 伊人久久大香线蕉av一区 | 高清成人 | 阿拉伯性视频xxxx | 欧美福利片在线观看 | 制服丝袜先锋影音 | a级性生活视频 | 欧美日韩成人一区 | 欧美色图亚洲视频 | 亚洲在线a | 中文字幕在线资源 | 亚洲精品视频中文字幕 | 国产夫妻av| 青青青青操 | 久久久久亚洲日日精品 | 亚洲综合色成人 | 东北女人av | 福利视频在线导航 | 国产毛片久久久久 | 瑟瑟在线视频 | 久久精品99北条麻妃 | 91在线视频精品 | 国产真人真事毛片 | 亚洲精品乱码久久久久久久 | 在线射 | 亚洲一区中文字幕在线 | 日韩成人av网址 | 久久免费手机视频 | 欧美日韩在线免费 | 麻豆 美女 丝袜 人妻 中文 | 国产精品久久久久一区二区三区 | 久久久国产精品免费 | jizz欧美| 日本一本一道 | 凹凸日日摸日日碰夜夜 | 91小宝寻花一区二区三区 | 丰满岳跪趴高撅肥臀尤物在线观看 | 六月激情婷婷 | 日本免费网站 | 欧美亚洲另类小说 | 一级黄色影院 | 国产男女猛烈无遮挡免费视频动漫 | 91精品国产91久久久久久 | 97成人在线视频 | 136fldh导航福利微拍 | 国产精品一级黄片 | 中文字幕一区二区三区电影 | 中国三级黄色 | 嫩草影院在线观看视频 | 熟女一区二区三区四区 | 在线视频观看你懂得 | 欧美性做爰毛片 | 日韩电影一区二区三区四区 | avtt亚洲|