责任链模式各个对象的下一个处理对象在客户端指定,可以自由组合,灵活性强,状态模式各状态则是在编译时设置,即在各状态对象中指定,可对比struts的filter。
另外,书中变量的命名如jingli、zongjian、zongjingli这些是为了让读者区分,实际上不推荐使用拼音命名,我觉得还不如在name属性中设置成经理、总监、总经理比使用金利、宗剑这些要好
UML

代码结构

public class Client {public static void main(String[] args) {CommonManager jinli = new CommonManager("金利");Majordomo zongjian = new Majordomo("宗剑");GeneralManager zongjingli = new GeneralManager("钟精励");jinli.setSuperior(zongjian);zongjian.setSuperior(zongjingli);Request request = new Request();request.setRequestType("请假");request.setRequestContent("小菜请假");request.setNumber(1);jinli.requestApplications(request);Request request2 = new Request();request2.setRequestType("请假");request2.setRequestContent("小菜请假");request2.setNumber(4);jinli.requestApplications(request2);Request request3 = new Request();request3.setRequestType("加薪");request3.setRequestContent("小菜请求加薪");request3.setNumber(500);jinli.requestApplications(request3);Request request4 = new Request();request4.setRequestType("加薪");request4.setRequestContent("小菜请求加薪");request4.setNumber(1000);jinli.requestApplications(request4);}
}
public class CommonManager extends Manager {public CommonManager(String name) {super(name);}@Overridepublic void requestApplications(Request request) {if("请假".equals(request.getRequestType()) && request.getNumber() <= 2) {System.out.println(name + ":" + request.getRequestContent() + "数量" + request.getNumber() + "被批准");} else {if(getSuperior() != null) {getSuperior().requestApplications(request);}}}}
//总经理
public class GeneralManager extends Manager {public GeneralManager(String name) {super(name);}@Overridepublic void requestApplications(Request request) {if("请假".equals(request.getRequestType())) {System.out.println(name + ":" + request.getRequestContent() + "数量" + request.getNumber() + "被批准");} else if("加薪".equalsIgnoreCase(request.getRequestType()) && request.getNumber() <= 500){System.out.println(name + ":" + request.getRequestContent() + "数量" + request.getNumber() + "被批准");} else if("加薪".equalsIgnoreCase(request.getRequestType()) && request.getNumber() > 500){System.out.println(name + ":" + request.getRequestContent() + "数量" + request.getNumber() + "再说吧");}}}
//总监
public class Majordomo extends Manager {public Majordomo(String name) {super(name);}@Overridepublic void requestApplications(Request request) {if("请假".equals(request.getRequestType()) && request.getNumber() <= 5) {System.out.println(name + ":" + request.getRequestContent() + "数量" + request.getNumber() + "被批准");} else {if(getSuperior() != null) {getSuperior().requestApplications(request);}}}}
public abstract class Manager {protected String name;public Manager(String name) {super();this.name = name;}private Manager superior;public Manager getSuperior() {return superior;}public void setSuperior(Manager superior) {  //关键的方法this.superior = superior;}public abstract void requestApplications(Request request);
}
public class Request {//申请类别private String requestType;//申请内容private String requestContent;//数量private int number;public String getRequestType() {return requestType;}public void setRequestType(String requestType) {this.requestType = requestType;}public String getRequestContent() {return requestContent;}public void setRequestContent(String requestContent) {this.requestContent = requestContent;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}}

运行结果

《大话设计模式》java实现之责任链模式相关推荐

  1. Java中的责任链模式

    当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时,就需要采用责任链设计模式. 在运行时处理器顺序的可变性也很重要.模式的UML表示如下: 处理程序定义处理器对象的一般结构. 这里的" ...

  2. 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)

    文章目录 1.简介 2.使用场景 3.示例 4.变种 参考文献 1.简介 经常听身边的同事说其在项目中用到了责任链模式,今天就来学习一下什么是责任链模式. 责任链模式(Chain of Respons ...

  3. Java设计模式(九)责任链模式 命令模式

    (十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...

  4. 设计模式(四)责任链模式——责任链模式结构

    定义 责任链是行为型设计模式的一种,通过前一个处理者记录下一个处理者的方式形成一条处理链.客户端在调用时只需要将请求传递到责任上即可,无需关注链路中的具体的传递过程.而链路中内部的处理,是按照前一个处 ...

  5. Android设计模式详解之责任链模式

    前言 责任链模式是行为型设计模式: 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 使用场景: 多 ...

  6. 设计模式第七讲-责任链模式

    简介 责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 图例 责任链-根据事情大小来决 ...

  7. 设计模式(五)责任链模式

    一.什么是责任链模式?     责任链就是从一个起点发起请求,然后沿着任务链依次传递给每一个节点上的对象,直到有一个节点处理这个请求为止. 二.责任链模式实例实现? 1 public abstract ...

  8. 设计模式中的车轮战-责任链模式

    责任链模式在Android中的应用莫过于事件分发了,ViewGroup对事件分别给子View,从ViewTree的顶部至上而下地进行处理,直到事件被消化为止,这种方法在Android广播中也能看到 责 ...

  9. 设计模式(三)- 责任链模式

    职责链模式 文章目录 职责链模式 1.职责链模式 1.介绍 2.应用实例 代码 1.员工提交请求类:LeaveRequest 2. 抽象请假处理类:AbstractLeaveHandler 3.直接主 ...

最新文章

  1. Redis介绍使用及进阶
  2. dp application in paper (c#)
  3. 【加密U盾】在LINX操作系统中部署KD电子钥匙
  4. spring boot actuator工作原理之http服务暴露源码分析
  5. 【BZOJ 1098】办公楼(补图连通块个数,Bfs)
  6. MySQL 避坑指南之隐式数据类型转换
  7. linux系统配置免密登录
  8. wpf开源ui引用步骤_完善开源产品策略的6个步骤
  9. python ^ and or >> <<
  10. 从错误中学习,如何配置iis?
  11. 【细胞分割】基于matlab GUI原子力显微镜图像分析【含Matlab源码 1371期】
  12. VUE实现输入完当前input后自动跳到下一个input
  13. 浅谈使用实现FactoryBean接口的方式定义Bean
  14. Ubuntu文件目录结构详解
  15. Java实现多张图片转pdf
  16. Socket编程之聊天室
  17. 亲水性小分子PEG DBCO-PEG4-酸,1416711-60-8可以进行点击化学反应
  18. CM9和AOKP的区别
  19. MFC 16 进制HEX显示控件
  20. Hadoop的归档---har

热门文章

  1. 思科交换机不恢复配置重置特权密码
  2. 微型真空泵的可靠性问题
  3. 只狼新手关卡流程拆解及分析
  4. 微信小程序开发--首页及详情页开发
  5. mysql实战45讲(15-22)
  6. 世界头号超级***给你的忠告
  7. 针对服装行业管理痛点作出分析
  8. python27.dll是系统自带的吗_正版《GTA5》自带“神仙辅助”功能?官方认可外挂属实厉害...
  9. 服务器机柜透明显示屏展示,透明显示屏
  10. 电脑一键在线重装win7系统教程