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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

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

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

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

定義

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

UML類圖

角色

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

例子

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

  Handler

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: Handler.java * @Description: 審批請假抽象類* @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(小組長)

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: GroupLeader.java * @Description: 小組長,能審批的是小于等于1天的請假申請 * @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("小組長審批");} else {System.out.println("超過了小組長權(quán)限,移交上級");this.getHandler().approve(day);}} }

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

package com.csdhsm.designpattem.chainofresponsibility;/** * @Title: ProjectManager.java * @Description: 項目經(jīng)理,能審批的是小于等于3天的請假* @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("項目經(jīng)理審批");} else {System.out.println("超過了項目經(jīng)理權(quán)限,移交上級");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審批");} }

  客戶端

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);//處理請求leader.approve(6);} }

  結(jié)果

  OK,成功!

總結(jié)

  優(yōu)點

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

  缺點

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

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

總結(jié)

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

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