《大话设计模式》java实现之责任链模式
责任链模式各个对象的下一个处理对象在客户端指定,可以自由组合,灵活性强,状态模式各状态则是在编译时设置,即在各状态对象中指定,可对比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实现之责任链模式相关推荐
- Java中的责任链模式
当应有几个处理器来执行某项操作并为这些处理器定义特定顺序时,就需要采用责任链设计模式. 在运行时处理器顺序的可变性也很重要.模式的UML表示如下: 处理程序定义处理器对象的一般结构. 这里的" ...
- 行为型设计模式(1)—— 责任链模式(Chain of Responsibility Pattern)
文章目录 1.简介 2.使用场景 3.示例 4.变种 参考文献 1.简介 经常听身边的同事说其在项目中用到了责任链模式,今天就来学习一下什么是责任链模式. 责任链模式(Chain of Respons ...
- Java设计模式(九)责任链模式 命令模式
(十七)责任链模式 责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系.面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化.这种设计能够使得系统更加 ...
- 设计模式(四)责任链模式——责任链模式结构
定义 责任链是行为型设计模式的一种,通过前一个处理者记录下一个处理者的方式形成一条处理链.客户端在调用时只需要将请求传递到责任上即可,无需关注链路中的具体的传递过程.而链路中内部的处理,是按照前一个处 ...
- Android设计模式详解之责任链模式
前言 责任链模式是行为型设计模式: 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 使用场景: 多 ...
- 设计模式第七讲-责任链模式
简介 责任链模式的定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 图例 责任链-根据事情大小来决 ...
- 设计模式(五)责任链模式
一.什么是责任链模式? 责任链就是从一个起点发起请求,然后沿着任务链依次传递给每一个节点上的对象,直到有一个节点处理这个请求为止. 二.责任链模式实例实现? 1 public abstract ...
- 设计模式中的车轮战-责任链模式
责任链模式在Android中的应用莫过于事件分发了,ViewGroup对事件分别给子View,从ViewTree的顶部至上而下地进行处理,直到事件被消化为止,这种方法在Android广播中也能看到 责 ...
- 设计模式(三)- 责任链模式
职责链模式 文章目录 职责链模式 1.职责链模式 1.介绍 2.应用实例 代码 1.员工提交请求类:LeaveRequest 2. 抽象请假处理类:AbstractLeaveHandler 3.直接主 ...
最新文章
- Redis介绍使用及进阶
- dp application in paper (c#)
- 【加密U盾】在LINX操作系统中部署KD电子钥匙
- spring boot actuator工作原理之http服务暴露源码分析
- 【BZOJ 1098】办公楼(补图连通块个数,Bfs)
- MySQL 避坑指南之隐式数据类型转换
- linux系统配置免密登录
- wpf开源ui引用步骤_完善开源产品策略的6个步骤
- python ^ and or >> <<
- 从错误中学习,如何配置iis?
- 【细胞分割】基于matlab GUI原子力显微镜图像分析【含Matlab源码 1371期】
- VUE实现输入完当前input后自动跳到下一个input
- 浅谈使用实现FactoryBean接口的方式定义Bean
- Ubuntu文件目录结构详解
- Java实现多张图片转pdf
- Socket编程之聊天室
- 亲水性小分子PEG DBCO-PEG4-酸,1416711-60-8可以进行点击化学反应
- CM9和AOKP的区别
- MFC 16 进制HEX显示控件
- Hadoop的归档---har