职责链模式
来源:互联网 发布:阿里云拍照专用幕布 编辑:程序博客网 时间:2024/05/17 01:49
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有个对象处理它为止。
UML图如下所示:
1、Handler类,定义一个处理请示的接口
public abstract class Handler{protected Handler successor;public void setSuccessor(Handler successor){this.successor = successor;}public abstract void HandleRequest(int request);}
2、ConcreteHandler类
public class ConcreteHandler1 extends Handler{@Overridepublic void HandleRequest(int request){// TODO Auto-generated method stubif(request>=0 && request<10){System.out.println("处理请求1"+request);}else if(successor!=null){successor.HandleRequest(request);}}}class ConcreteHandler2 extends Handler{@Overridepublic void HandleRequest(int request){// TODO Auto-generated method stub if(request>=10 && request<20) { System.out.println("处理请求2"+request); } else if(successor!=null) { successor.HandleRequest(request); }}}
class ConcreteHandler3 extends Handler{@Overridepublic void HandleRequest(int request){// TODO Auto-generated method stub if(request>=20 && request<30) { System.out.println("处理请求3"+request); } else if(successor!=null) { successor.HandleRequest(request); }}}3、Client类
public class Client{public static void main(String[] args){Handler h1=new ConcreteHandler1();Handler h2=new ConcreteHandler2();Handler h3=new ConcreteHandler3();h1.setSuccessor(h2);h2.setSuccessor(h3);int[] requests={2,5,14,7,22,27,20};for(int request:requests){ h1.HandleRequest(request);}}}实例,公司各层对请假几天,拥有的权限。经理允许请假2天,总监允许请假一周,总经理允许请假半个月,UML图如下
1、Administrator类
public abstract class Administrator{protected Administrator administrator;public void setManager(Administrator administrator){this.administrator= administrator;}public abstract void request(Request request);}2、Request类
public class Request{private String requestContent;private int requestNum;public String getRequestContent(){ return requestContent;}public void setRequestContent(String requestContent){ this.requestContent = requestContent;}public int getRequestNum(){ return requestNum;}public void setRequestNum(int requestNum){ this.requestNum = requestNum;}}
3、Manager类
public class Manager extends Administrator{@Overridepublic void request(Request req){// TODO Auto-generated method stubif(req.getRequestContent()=="请假" && req.getRequestNum()<=2){System.out.println("Manager允许请假");}else{System.out.println("Manager没有权限");if(administrator!=null){administrator.request(req);}}}}4、ChiefInspector类
public class ChiefInspector extends Administrator{@Overridepublic void request(Request req){// TODO Auto-generated method stubif(req.getRequestContent()=="请假" && req.getRequestNum()<=7){System.out.println("Chiefinspector允许请假");}else {System.out.println("总监没有权限");if(administrator!=null){administrator.request(req);}}}}
5、GeneralManager类
public class GeneralManager extends Administrator{@Overridepublic void request(Request req){// TODO Auto-generated method stubif (req.getRequestContent() == "请假"&& req.getRequestNum() <= 15){System.out.println("GeneralMananger允许请假");}else{System.out.println("GeneralManager没有权限");if (administrator != null){administrator.request(req);}}}}6、Client类
public class Client{public static void main(String[] args){Administrator manager=new Manager();Administrator chiefInspector=new ChiefInspector();Administrator generalManager=new GeneralManager();manager.setManager(chiefInspector);chiefInspector.setManager(generalManager);Request request=new Request();request.setRequestContent("请假");request.setRequestNum(1);manager.request(request);System.out.println("-----------");Request request3=new Request();request3.setRequestContent("请假");request3.setRequestNum(5);manager.request(request3);System.out.println("-----------");Request request4=new Request();request4.setRequestContent("请假");request4.setRequestNum(12);manager.request(request4);}}运行结果如下:
0 0
- 职责链设计模式
- 职责链模式
- 职责链模式
- 职责链模式
- ChainOfResponsibility(职责链)模式
- 职责链模式ChainOfResponsibility
- 职责链模式
- 职责链模式 ResponsibilityChainPattern
- 【设计模式】职责链
- 职责链模式
- java职责链模式
- 职责链模式
- 职责链模式
- 职责链模式(python)
- 职责链模式
- 职责链模式
- 职责链模式
- 职责链模式
- php get_magic_quotes_gpc()
- flash复位语句
- Could not validate ASMSNMP password due to following error- "ORA-01031: insufficient privileges"
- 杭电1001 - Sum Problem
- ceph osd full 解决方法
- 职责链模式
- Respond.js
- 文本溢出用css定义省略号显示的方法
- 一个程序员的创业历程
- 每个 C 程序员都应知道的关于未定义行为的那点事(下篇)
- html5shiv.js让IE6、IE7、IE8支持html5
- 所有服务器变量
- 安卓自定义Scrollview,实现卷帘效果
- 循环水处理剂:游泳池水处理投药量的施药标准介绍