设计模式之GOF23责任链模式
责任链模式chain of responsibility
将能够处理同一类请求的对象连成一条链,所提交的请求依次在链上传递,直到传递至有能力处理该请求的对象,不能则传给链上下一个
场景:
-打牌时
-奖学金审批
-请假审批
核心:是在客户端中才成链,也可以通过配置文件或者存在数组中加载
开发中常见场景:
-try catch异常链
-javascript语言中,事件的冒泡和捕获机制 Java语言中,事件处理采用观察者模式
-Servlet开发中,过滤器的链式处理
-Struts2中,拦截器的调用也是典型的链式处理
例子:工作中请假
0-3主任审批 3-10经理审批 10-30总经理审批
* 请假条
* @author 小帆敲代码
*
*/
private String empName;
private int leaveDays;
private String reason;
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public int getLeaveDays() {
return leaveDays;
}
public void setLeaveDays(int leaveDays) {
this.leaveDays = leaveDays;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public LeaveRequest(String empName, int leaveDays, String reason) {
this.empName = empName;
this.leaveDays = leaveDays;
this.reason = reason;
}
}
protected String leaderName;
protected Leader nextLeader;//责任链中的后继对象
public Leader(String leaderName) {
this.leaderName = leaderName;
}
//设置下一级领导
public void setNetLeader(Leader leader) {
this.nextLeader=leader;
}
//业务方法处理请假条
public abstract void handler(LeaveRequest leaveRequest) ;
}
super(leaderName);
}
public void handler(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays()<3) {
System.out.println("员工:"+leaveRequest.getEmpName()+",请假:"+leaveRequest.getLeaveDays()+",原因:"+leaveRequest.getReason());
System.out.println("主任:"+this.leaderName+",审核通过!");
}else {
if(this.nextLeader!=null) {
nextLeader.handler(leaveRequest);
}else {
System.out.println("此员工可能想辞职");
}
}
}
super(leaderName);
}
public void handler(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays()<10) {
System.out.println("员工:"+leaveRequest.getEmpName()+",请假:"+leaveRequest.getLeaveDays()+",原因:"+leaveRequest.getReason());
System.out.println("经理:"+this.leaderName+",审核通过!");
}else {
if(this.nextLeader!=null) {
nextLeader.handler(leaveRequest);
}else {
System.out.println("此员工可能想辞职");
}
}
}
super(leaderName);
}
public void handler(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays()<30) {
System.out.println("员工:"+leaveRequest.getEmpName()+",请假:"+leaveRequest.getLeaveDays()+",原因:"+leaveRequest.getReason());
System.out.println("总经理:"+this.leaderName+",审核通过!");
}else {
if(this.nextLeader!=null) {
nextLeader.handler(leaveRequest);
}else {
System.out.println("此员工可能想辞职");
}
}
}
Leader a=new Director("张三");
Leader b=new Manager("李四");
Leader c=new GeneralManager("王五");
//开始组织责任链
a.setNetLeader(b);
b.setNetLeader(c);
LeaveRequest req1=new LeaveRequest("TOM", 2, "抓JACK");
a.handler(req1);
}
设计模式之GOF23责任链模式的更多相关文章
- Python使用设计模式中的责任链模式与迭代器模式的示例
Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...
- Java设计模式学习记录-责任链模式
前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...
- 《java设计模式》之责任链模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...
- 重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 场地和场景的重要性 射击
- [设计模式] javascript 之 责任链模式
责任链模式:定义 责任链接模式又称职责链模式,是一种对象的行为模式:它是一种链式结构,每个节点都有可能两种操作,要么处理该请求停止该请求操作,要么把请求转发到下一个节点,让下一个节点来处理请求:该模式 ...
- Java设计模式系列之责任链模式
责任链模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道 ...
- 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)
参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- Java设计模式13:责任链模式
前言 来菜鸟这个大家庭10个月了,总得来说比较融入了环境,同时在忙碌的工作中也深感技术积累不够,在优秀的人身边工作必须更加花时间去提升自己的技术能力.技术视野,所以开一个系列文章,标题就轻松一点叫做最 ...
随机推荐
- [Abp vNext 入坑分享] - 1.创建初始的项目
一.简要说明 本篇文章主要是跟着官方的文档把项目安装好先,同时了解一下大概的项目结构. 二.具体步骤 2.1全局安装ABP CLI,直接在cmd中安装即可.如果你之前安装过,这里可以略过: dotne ...
- C++枚举算法
枚举算法 什么是枚举? 枚举,顾名思义,就是用最笨的方法,去解决问题(暴力枚举),一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数.这两种类型经常(但不总是)重叠. 枚举 ...
- 史上最详细的VM虚拟机安装Kali-linux教程(以2020.1版本为例,含下载地址+默认提升为root权限)
一.官方下载 Kali Linux 官方网址:www.Kali.org下载方式分两种:http 下载和 bt 下载(由于是国外网站 http 方式下载会非常慢),选择对应版本点击即可下载. 二.创建新 ...
- 算法笔记刷题5(PAT A1025)
第一次上手PAT的甲级题目,瑟瑟发抖(英语不好对着题目愣了半天) 这一题的要点是使用sort函数. 使用sort函数必须使用 #include <algorithm> using name ...
- Windows API Index
https://docs.microsoft.com/en-us/windows/desktop/apiindex/windows-api-list
- 修改mysql配置中my.conf中max_allowed_packet变量
mysql根据配置文件会限制server接受的数据包大小. 有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败. 查看目前配置 show VARIABLES ...
- Burnside&Polya总结
这里就算是一个小总结吧- 附参考的网址: http://blog.sina.com.cn/s/blog_6a46cc3f0100s2qf.html http://www.cnblogs.com/han ...
- SQL语句学习(二)
为一张表添加外键: 这里我们希望再建一张订单的表为t_order,包含order_id,customer_id和price: ) NOT NULL auto_increment PRIMARY KEY ...
- 配置windows自动修改密码和自动登录
日常运维多台服务器,每季度要修改一次密码,非常麻烦,现做一个VBS脚本,计划任务设置每季度第一天三点定时运行,则可解决该问题,具体实现脚本如下:autochg_pwd.vbs ystr=year(No ...
- SaltStack数据系统之Grains、Pillar
SaltStack数据系统之Grains.Pillar 1.什么是Grains? Grains是saltstack的组件,用于收集salt-minion在启动时候的信息,又称为静态信息.Grains是 ...