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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

《研磨设计模式》chap23 职责链模式chainOfResponsibility(2)应用场景

發(fā)布時(shí)間:2025/3/21 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《研磨设计模式》chap23 职责链模式chainOfResponsibility(2)应用场景 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 初步實(shí)現(xiàn)

public abstract class Handler {//持有下一個(gè)處理請(qǐng)求的對(duì)象 protected Handler successor = null;//設(shè)置下一個(gè)處理請(qǐng)求的對(duì)象 public void setSuccessor(Handler successor){this.successor = successor;}//處理聚餐費(fèi)用的申請(qǐng) public abstract String handleFeeRequest(String user,double fee); }public class DepManager extends Handler{ public String handleFeeRequest(String user, double fee) {String str = "";//部門經(jīng)理的權(quán)限只能在1000以內(nèi)if(fee < 1000){//為了測試,簡單點(diǎn),只同意小李申請(qǐng)的if("小李".equals(user)){str = "部門經(jīng)理同意"+user+"聚餐費(fèi)用"+fee+"元的請(qǐng)求";}else{//其他人一律不同意str = "部門經(jīng)理不同意"+user+"聚餐費(fèi)用"+fee+"元的請(qǐng)求";}return str;}else{//超過1000,繼續(xù)傳遞給級(jí)別更高的人處理if(this.successor!=null){return this.successor.handleFeeRequest(user, fee);}}return str;} }public class GeneralManager extends Handler{public String handleFeeRequest(String user, double fee) {String str = "";//總經(jīng)理的權(quán)限很大,只要請(qǐng)求到了這里,他都可以處理if(fee >= 1000){//為了測試,簡單點(diǎn),只同意小李的if("小李".equals(user)){}else{//其他人一律不同意str = "總經(jīng)理不同意"+user+"聚餐費(fèi)用"+fee+"元的請(qǐng)求";}return str;}else{//如果還有后繼的處理對(duì)象,繼續(xù)傳遞if(this.successor!=null){return successor.handleFeeRequest(user, fee);}}return str;} }

2. 功能擴(kuò)展

兩種請(qǐng)求,還有處理另外一種費(fèi)用。

//定義職責(zé)對(duì)象的接口 public abstract class Handler {// 持有下一個(gè)處理請(qǐng)求的對(duì)象 protected Handler successor = null;//設(shè)置下一個(gè)處理請(qǐng)求的對(duì)象 public void setSuccessor(Handler successor){this.successor = successor;}//處理聚餐費(fèi)用的申請(qǐng) public abstract String handleFeeRequest(String user,double fee);//處理預(yù)支差旅費(fèi)用的申請(qǐng) public abstract boolean handlePreFeeRequest(String user,double requestFee); }public class DepManager extends Handler{ public String handleFeeRequest(String user, double fee) {String str = "";//部門經(jīng)理的權(quán)限只能在1000以內(nèi)if(fee < 1000){//為了測試,簡單點(diǎn),只同意小李申請(qǐng)的if("小李".equals(user)){str = "部門經(jīng)理同意"+user+"聚餐費(fèi)用"+fee+"元的請(qǐng)求";}else{//其他人一律不同意str = "部門經(jīng)理不同意"+user+"聚餐費(fèi)用"+fee+"元的請(qǐng)求";}return str;}else{//超過1000,繼續(xù)傳遞給級(jí)別更高的人處理if(this.successor!=null){return this.successor.handleFeeRequest(user, fee);}}return str;}public boolean handlePreFeeRequest(String user, double requestNum) {//部門經(jīng)理的權(quán)限比較小,只能在20000以內(nèi)if(requestNum < 20000){//工作需要嘛,統(tǒng)統(tǒng)同意System.out.println("部門經(jīng)理同意"+user+"預(yù)支差旅費(fèi)用"+requestNum+"元的請(qǐng)求");return true;}else{//超過20000,繼續(xù)傳遞給級(jí)別更高的人處理if(this.successor!=null){return this.successor.handlePreFeeRequest(user, requestNum);}}return false;} }public class Client {public static void main(String[] args) {//先要組裝職責(zé)鏈 Handler h1 = new GeneralManager();Handler h2 = new DepManager();Handler h3 = new ProjectManager();h3.setSuccessor(h2);h2.setSuccessor(h1);//開始測試申請(qǐng)聚餐費(fèi)用String ret1 = h3.handleFeeRequest("小李", 300);System.out.println("the ret1="+ret1);String ret2 = h3.handleFeeRequest("小李", 600);System.out.println("the ret2="+ret2);String ret3 = h3.handleFeeRequest("小李", 1200);System.out.println("the ret3="+ret3);//開始測試申請(qǐng)差旅費(fèi)用h3.handlePreFeeRequest("小張", 3000);h3.handlePreFeeRequest("小張", 6000);h3.handlePreFeeRequest("小張", 32000);} }

帶來問題:老是要改接口。

3. 更好的方法

//定義職責(zé)對(duì)象的接口 public abstract class Handler { protected Handler successor = null; //持有下一個(gè)處理請(qǐng)求的對(duì)象//設(shè)置下一個(gè)處理請(qǐng)求的對(duì)象public void setSuccessor(Handler successor){this.successor = successor;}//通用的請(qǐng)求處理方法 public Object handleRequest(RequestModel rm){if(successor != null){//這個(gè)是默認(rèn)的實(shí)現(xiàn),如果子類不愿意處理這個(gè)請(qǐng)求,那就傳遞到下一個(gè)職責(zé)對(duì)象去處理return this.successor.handleRequest(rm);}else{System.out.println("沒有后續(xù)處理或者暫時(shí)不支持這樣的功能處理");return false;}} }public class RequestModel {//表示具體的業(yè)務(wù)類型 private String type;//通過構(gòu)造方法把具體的業(yè)務(wù)類型傳遞進(jìn)來 public RequestModel(String type){this.type = type;}public String getType() {return type;} }public class PreFeeRequestModel extends RequestModel{//約定具體的業(yè)務(wù)類型 public final static String FEE_TYPE = "preFee";public PreFeeRequestModel() {super(FEE_TYPE);}private String user; //申請(qǐng)人 private double fee; //申請(qǐng)金額public String getUser() {return user;}public void setUser(String user) {this.user = user;}public double getFee() {return fee;}public void setFee(double fee) {this.fee = fee;} }//處理聚餐費(fèi)用 public class DepManager extends Handler{public Object handleRequest(RequestModel rm){ if(FeeRequestModel.FEE_TYPE.equals(rm.getType())){return handleFeeRequest(rm);}else{return super.handleRequest(rm);}}private Object handleFeeRequest(RequestModel rm) {//先把通用的對(duì)象造型回來FeeRequestModel frm = (FeeRequestModel)rm;String str = "";//部門經(jīng)理的權(quán)限只能在1000以內(nèi)if(frm.getFee() < 1000){//為了測試,簡單點(diǎn),只同意小李申請(qǐng)的if("小李".equals(frm.getUser())){str = "部門經(jīng)理同意"+frm.getUser()+"聚餐費(fèi)用"+frm.getFee()+"元的請(qǐng)求";}else{//其他人一律不同意str = "部門經(jīng)理不同意"+frm.getUser()+"聚餐費(fèi)用"+frm.getFee()+"元的請(qǐng)求";}return str;}else{//超過1000,繼續(xù)傳遞給級(jí)別更高的人處理if(this.successor!=null){return this.successor.handleRequest(rm);}}return str;} }//處理預(yù)支差旅費(fèi)用 public class DepManager2 extends DepManager{public Object handleRequest(RequestModel request){if(PreFeeRequestModel.FEE_TYPE.equals(request.getType())){//表示預(yù)支差旅費(fèi)用申請(qǐng)return myHandler(request);}else{//其他的讓父類去處理return super.handleRequest(request);}}private Object myHandler(RequestModel request) {//先把通用的對(duì)象造型回來PreFeeRequestModel fr = (PreFeeRequestModel)request;//部門經(jīng)理的權(quán)限比較小,只能在20000以內(nèi)if(fr.getFee() < 20000){//工作需要嘛,統(tǒng)統(tǒng)同意System.out.println("部門經(jīng)理同意"+fr.getUser()+"預(yù)支差旅費(fèi)用"+fr.getFee()+"元的請(qǐng)求");return true;}else{//超過20000,繼續(xù)傳遞給級(jí)別更高的人處理if(this.successor != null){return this.successor.handleRequest(request);}}return false;} }public class GeneralManager extends Handler{ ... }public class GeneralManager2 extends GeneralManager{ ... }public class Client {public static void main(String[] args) {//先要組裝職責(zé)鏈 Handler h1 = new GeneralManager2();Handler h2 = new DepManager2();Handler h3 = new ProjectManager2();h3.setSuccessor(h2);h2.setSuccessor(h1);//開始測試申請(qǐng)聚餐費(fèi)用FeeRequestModel frm = new FeeRequestModel();frm.setFee(300);frm.setUser("小李");//調(diào)用處理String ret1 = (String)h3.handleRequest(frm);System.out.println("ret1="+ret1);//重新設(shè)置申請(qǐng)金額,再調(diào)用處理frm.setFee(800); h3.handleRequest(frm);String ret2 = (String)h3.handleRequest(frm);System.out.println("ret2="+ret2);//重新設(shè)置申請(qǐng)金額,再調(diào)用處理frm.setFee(1600); h3.handleRequest(frm);String ret3 = (String)h3.handleRequest(frm);System.out.println("ret3="+ret3);//開始測試申請(qǐng)預(yù)支差旅費(fèi)用PreFeeRequestModel pfrm = new PreFeeRequestModel();pfrm.setFee(3000);pfrm.setUser("小張");//調(diào)用處理h3.handleRequest(pfrm);//重新設(shè)置申請(qǐng)金額,再調(diào)用處理pfrm.setFee(6000);h3.handleRequest(pfrm);//重新設(shè)置申請(qǐng)金額,再調(diào)用處理pfrm.setFee(36000);h3.handleRequest(pfrm);} }

總結(jié)

以上是生活随笔為你收集整理的《研磨设计模式》chap23 职责链模式chainOfResponsibility(2)应用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 爱露出| av大片网站 | 欧美色淫| 国产精品久久久久久妇女 | 91精彩视频 | 成人在线免费小视频 | 成年人网站免费观看 | 免费99精品国产自在在线 | www.youjizz.com中国| 在线三区 | 性高跟鞋xxxxhd国产电影 | 久久黄色小视频 | 亚洲影库 | 亚洲综合视频在线观看 | 精品人成 | 国产东北真实交换多p免视频 | 波多野结衣视频免费 | 一级国产黄色片 | 亚洲色图20p | 欧美日韩国产二区 | 在线免费黄色网 | 嫩草一区二区 | 国产美女自慰在线观看 | 中文字幕一区二区三区5566 | 日本韩国视频 | aaa国产精品 | 欧美精品一二三四区 | 影音先锋日韩资源 | 91婷婷射| 精品无码一区二区三区爱欲 | 国产a毛片 | 美味的客房沙龙服务 | 日韩欧美猛交xxxxx无码 | 波多野结衣家庭主妇 | 日韩美一区二区三区 | 三级毛毛片 | 麻豆亚洲av成人无码久久精品 | 天天摸夜夜 | 午夜写真片福利电影网 | 亚洲av无码乱码国产精品 | 成人蜜桃视频 | 国内精品久久久 | 国产又粗又猛又爽免费视频 | 999资源站 | 欧美在线91 | aa一级视频 | 天天透天天操 | 成人av在线网址 | 九色porny视频| 欧美精品一区二区三区久久久竹菊 | 亚洲一级视频在线观看 | 国产精品亲子伦对白 | 天天噜夜夜噜 | 深夜福利在线播放 | 超碰超碰在线 | 女女h百合无遮涩涩漫画软件 | 国产不卡视频一区二区三区 | 色哟哟免费在线观看 | 日韩草逼 | jizzjizz8| 18禁网站免费无遮挡无码中文 | 色男人的天堂 | 噜啪啪| 国产精品www | 亚洲av无一区二区三区怡春院 | 亚洲天堂五月天 | 日韩精品视频网 | 久久久久久一级片 | αv在线 | 久久久久久av无码免费看大片 | 男女免费视频 | 国产吃瓜黑料一区二区 | 日韩三级黄色片 | 特a级黄色片 | 嫩草影院永久入口 | 污污污污污污www网站免费 | 一级视频在线免费观看 | 污视频在线播放 | 天天综合欧美 | 青青草在线免费 | 亚洲中文字幕无码一区 | 丰满大乳露双乳呻吟 | 国产有码在线观看 | 狠狠操伊人 | 亚洲精品久久久蜜桃网尤妮丝 | 亚洲欧美乱综合图片区小说区 | 黄色一级视频在线观看 | 日本少妇做爰全过程毛片 | 国产精品99久久久久 | 久草视频免费在线 | 国产性―交―乱―色―情人 | 精品九一| 欧美性猛交ⅹxx乱大交 | 亚洲中文字幕久久无码 | 顶级嫩模啪啪呻吟不断好爽 | 冲田杏梨一区二区三区 | 国产污污在线观看 | 99热精品在线播放 | 青草久久久 |