日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲一区二区三区四区视频 | 日韩亚洲视频 | 一节黄色片 | 91免费视频免费版 | 五月天天色 | 亚洲精品xxx | 69日影院 | 韩日午夜在线资源一区二区 | 激情婷婷久久 | 男女视频在线免费观看 | 精久久久| 久久99影院 | 亚洲高清毛片一区二区 | 欧美人与野 | 男人天堂伊人 | 精品欧美一区二区三区久久久 | 96国产视频| 青草成人 | 青娱乐精品视频 | 麻豆av导航 | 国产无码精品合集 | 国产男女猛烈无遮挡a片漫画 | xxxx18日本| 国产黄大片在线观看画质优化 | aaa午夜 | 日韩精品成人在线观看 | 国产精品久久色 | 日韩在线视频你懂的 | 欧美精品毛片 | 亚洲色在线视频 | 亚洲涩涩视频 | 国产白丝av | 影音先锋中文字幕在线播放 | 亚洲少妇18p | av片免费 | 欧美激情片在线观看 | 免费的黄色的网站 | wwwxx国产 | 免费一级suv好看的国产网站 | 日本一区中文字幕 | 亚洲黄色一级大片 | 日韩 欧美 综合 | 午夜一区二区三区在线 | 一级美女大片 | 国产a√精品区二区三区四区 | 亚洲精品一区二区三区不卡 | 少妇一级淫片免费放 | 青青艹在线视频 | 一品毛片| 国产成人一区二区三区 | 欧美久久久一区二区三区 | 玖玖综合网| www.国产免费 | 亚洲欧洲精品一区 | 成年人的视频网站 | 亚洲网在线观看 | 成人毛片一区二区三区 | 一区在线免费观看 | 国产精品视频久久久久久 | 精品一区二区三区国产 | 亚洲麻豆视频 | 天堂网在线观看视频 | 亚洲性生活 | 免费一二三区 | 免费在线成人网 | 日日夜夜免费精品视频 | 国产免费一区二区三区最新6 | 91嫩草视频在线观看 | 欧美性日韩 | 国产免费一区二区三区在线播放 | 曰批又黄又爽免费视频 | 土耳其xxxx性hd极品 | 国产精品视频在线观看免费 | 日日碰 | 中文自拍| 99黄色网 | 日本丰满少妇一区二区三区 | 毛片网站在线免费观看 | 天堂国产精品 | 久久99精品久久久久 | 成人乱码一区二区三区av | 欧美性受视频 | 久久精品影视 | 亚洲精品 日韩无码 | 黄色小视频免费观看 | 国产精品羞羞答答在线 | 亚洲国产中文字幕在线 | 在线观看中文字幕第一页 | 日韩精品一区不卡 | 亚洲精品免费看 | 一级片免费观看 | 国产一区二区三区四区五区六区 | 国产免费无码XXXXX视频 | 日韩精品一二区 | 在线视频免费播放 | 国产成人精品一区二三区四区五区 | 经典毛片 | 天天做天天爱天天爽综合网 | 久久国产精品一区 |