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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式(24)-----责任链模式

發(fā)布時(shí)間:2024/1/17 asp.net 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式(24)-----责任链模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

責(zé)任鏈模式(chain of responsibility)

定義

  責(zé)任鏈模式是對(duì)象的行為模式。使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者直接的耦合關(guān)系。將這些對(duì)象連成一條鏈,沿著這條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止。

UML類(lèi)圖

角色

  抽象處理者(Handler)角色?:定義一個(gè)請(qǐng)求的接口。如果需要可以定義個(gè)一個(gè)方法用來(lái)設(shè)定和返回下家對(duì)象的引用。   具體處理者(ConcreteHandler)角色?:如果可以處理就處理請(qǐng)求,如果不能處理,就把請(qǐng)求傳給下家,讓下家處理。也就是說(shuō)它處理自己能處理的請(qǐng)求且可以訪問(wèn)它的下家。

例子

  有人想請(qǐng)假,小組長(zhǎng)只能審批小于等于1天的假期,項(xiàng)目經(jīng)理可以審批小于等于3天的假期,CEO可以審批所有的假期。

  Handler

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: Handler.java * @Description: 審批請(qǐng)假抽象類(lèi)* @author: Han * @date: 2016年6月29日 下午6:05:46 */ public abstract class Handler {protected Handler handler;public Handler getHandler() {return handler;}public void setHandler(Handler handler) {this.handler = handler;}//審批方法public abstract void approve(int day); }

  GroupLeader(小組長(zhǎng))

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: GroupLeader.java * @Description: 小組長(zhǎng),能審批的是小于等于1天的請(qǐng)假申請(qǐng) * @author: Han * @date: 2016年6月29日 下午5:58:29 */ public class GroupLeader extends Handler {@Overridepublic void approve(int day) {if(day <= 1) {System.out.println("小組長(zhǎng)審批");} else {System.out.println("超過(guò)了小組長(zhǎng)權(quán)限,移交上級(jí)");this.getHandler().approve(day);}} }

  ProjectManager(項(xiàng)目經(jīng)理)

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 項(xiàng)目經(jīng)理,能審批的是小于等于3天的請(qǐng)假* @author: Han * @date: 2016年6月29日 下午6:01:49 */ public class ProjectManager extends Handler {@Overridepublic void approve(int day) {if(day <= 3) {System.out.println("項(xiàng)目經(jīng)理審批");} else {System.out.println("超過(guò)了項(xiàng)目經(jīng)理權(quán)限,移交上級(jí)");getHandler().approve(day);}} }

  CEO

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: CEO.java * @Description: 最后移交到CEO審批* @author: Han * @date: 2016年6月29日 下午6:03:59 */ public class CEO extends Handler {@Overridepublic void approve(int day) {System.out.println("CEO審批");} }

  客戶(hù)端

package com.csdhsm.designpattem.chainofresponsibility;public class Solution {public static void main(String[] args) {Handler leader = new GroupLeader();Handler manager = new ProjectManager();Handler ceo = new CEO();//把Handler連成一條鏈 leader.setHandler(manager);manager.setHandler(ceo);//處理請(qǐng)求leader.approve(6);} }

  結(jié)果

  OK,成功!

總結(jié)

  優(yōu)點(diǎn)

    調(diào)用者不需知道具體誰(shuí)來(lái)處理請(qǐng)求,也不知道鏈的具體結(jié)構(gòu),降低了節(jié)點(diǎn)域節(jié)點(diǎn)的耦合度;可在運(yùn)行時(shí)動(dòng)態(tài)修改鏈中的對(duì)象職責(zé),增強(qiáng)了給對(duì)象指派職責(zé)的靈活性。

  缺點(diǎn)

    沒(méi)有明確的接收者,可能傳到鏈的最后,也沒(méi)得到正確的處理。

轉(zhuǎn)載于:https://www.cnblogs.com/a294098789/p/5627861.html

總結(jié)

以上是生活随笔為你收集整理的设计模式(24)-----责任链模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。