来源:http://www.bjsxt.com/ 
一、【GOF23设计模式】_责任链模式、公文审批、供应链系统的采购审批、异常链、过滤器和拦截器调用过程

 package com.test.chainOfResp;
/**
* 封装请假的基本信息
*/
public class LeaveRequest {
private String empName;
private int leaveDays;
private String reason; public LeaveRequest(String empName, int leaveDays, String reason) {
super();
this.empName = empName;
this.leaveDays = leaveDays;
this.reason = 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;
}
}
 package com.test.chainOfResp;
/**
* 抽象类
*/
public abstract class Leader {
protected String name;
protected Leader nextLeader;//责任链上的后继对象 public Leader(String name) {
super();
this.name = name;
}
//设定责任链上的后继对象
public void setNextLeader(Leader nextLeader) {
this.nextLeader = nextLeader;
} /**
* 处理请求的核心的业务方法
* @param leaveRequest
*/
public abstract void handleRequest(LeaveRequest leaveRequest);
}
 package com.test.chainOfResp;
/**
* 主任
*/
public class Director extends Leader{ public Director(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays() < 3){
System.out.println("员工:"+leaveRequest.getEmpName()+"请假,天数:"+leaveRequest.getLeaveDays()+",理由:"+leaveRequest.getReason());
System.out.println("主任:"+this.name+",审批通过!");
}else{
if(this.nextLeader != null){
this.nextLeader.handleRequest(leaveRequest);
}
}
}
}
 package com.test.chainOfResp;
/**
* 经理
*/
public class Manager extends Leader{ public Manager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays() < 10){
System.out.println("员工:"+leaveRequest.getEmpName()+"请假,天数:"+leaveRequest.getLeaveDays()+",理由:"+leaveRequest.getReason());
System.out.println("经理:"+this.name+",审批通过!");
}else{
if(this.nextLeader != null){
this.nextLeader.handleRequest(leaveRequest);
}
}
}
}
 package com.test.chainOfResp;
/**
* 总经理
*/
public class GeneralManager extends Leader{ public GeneralManager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays() < 30){
System.out.println("员工:"+leaveRequest.getEmpName()+"请假,天数:"+leaveRequest.getLeaveDays()+",理由:"+leaveRequest.getReason());
System.out.println("总经理:"+this.name+",审批通过!");
}else{
System.out.println("莫非"+leaveRequest.getEmpName()+"想辞职,居然请假"+leaveRequest.getLeaveDays()+"天!");
}
}
}
 package com.test.chainOfResp;
/**
* 副总经理
*/
public class ViceGeneralManager extends Leader{ public ViceGeneralManager(String name) {
super(name);
} @Override
public void handleRequest(LeaveRequest leaveRequest) {
if(leaveRequest.getLeaveDays() < 20){
System.out.println("员工:"+leaveRequest.getEmpName()+"请假,天数:"+leaveRequest.getLeaveDays()+",理由:"+leaveRequest.getReason());
System.out.println("副总经理:"+this.name+",审批通过!");
}else{
if(this.nextLeader != null){
this.nextLeader.handleRequest(leaveRequest);
}
}
}
}
 package com.test.chainOfResp;

 public class Client {
public static void main(String[] args) {
Leader a = new Director("张三");
Leader b = new Manager("李四");
Leader b2 = new ViceGeneralManager("李小四");//新增逻辑,副总经理
Leader c = new GeneralManager("王五"); //组织责任链对象的关系
a.setNextLeader(b);
b.setNextLeader(b2);//新增关系
b2.setNextLeader(c); //开始请假操作
LeaveRequest leaveRequest = new LeaveRequest("Tom", 15, "回英国老家探亲!");
a.handleRequest(leaveRequest); }
}
控制台输出:
员工:Tom请假,天数:15,理由:回英国老家探亲!
副总经理:李小四,审批通过!

【GOF23设计模式】责任链模式的更多相关文章

  1. java 设计模式 -- 责任链模式

    设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...

  2. 浅谈Python设计模式 -- 责任链模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 之前在最开始就聊了Python设计模式有三种,其中关于创建型和结构型设计模式基本 ...

  3. 【设计模式】Java设计模式 - 责任链模式

    [设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...

  4. 我的Java设计模式-责任链模式

    今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...

  5. Java设计模式-责任链模式

    提出问题: 最初接触责任链模式就是在struts2中,在当时学的时候看了一眼,大概知道了原理,最近在复习,模拟struts2,说是模拟只是大体模拟了struts2的工作流程,很多东西都是写死的,只是为 ...

  6. Java与设计模式-责任链模式

    责任链模式属于行为型设计模式之中的一个,怎么理解责任链?责任链是能够理解成数个对象首尾连接而成,每个节点就是一个对象.每个对象相应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模 ...

  7. php设计模式-责任链模式

    责任链模式更像是一种简化多种场景下调用处理的一种设计模式,特别适合if-else分支判断很多的场景.比如是根据不同会员等级给予不同的优惠力度. 它的定义:对象的调用是由下家的应用连接起来的处理链.一直 ...

  8. C#设计模式-责任链模式(Chain of Responsibility Pattern)

    引子 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现.现在以请假流程为例,一般公 ...

  9. php 23种设计模式 - 责任链模式

    责任链模式 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行 ...

  10. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

随机推荐

  1. ASP.NET MVC 获取当前访问域名

    var request = filterContext.HttpContext.Request; string url = request.Url.Authority; string function ...

  2. Fix “Windows cannot access the specified device path or file” Error

    http://helpdeskgeek.com/help-desk/windows-cannot-access-the-specified-device-path-or-file/ Method 1 ...

  3. Controller_Abstract的改造

    Controller_Abstract 是所有Controller的父类,改造它可以节省很多时间. 比如execute方法,execute是每个action执行时都在执行的方法. function e ...

  4. 彻底解决Google浏览器CSS居中问题

    div做的界面时,又出现CSS hack(CSS兼容浏览器问题)在IE内核浏览器或者firefox浏览器中都能居中,没有居中的可以用其特殊标签来设定居中,如下划线 _ IE6优先识别,!importa ...

  5. crontab 定时调度

    crontab -e */1 8-23 * * * /www/target/sh/myorder.sh & 0 1 * * * /www/target/php/sh/mymoney.sh &a ...

  6. BAPI 调用相当于BAPI_TRANSACTION_COMMIT 的方法

    为什么.net调用SAP的BAPI接口需要调用BAPI_TRANSACTION_COMMIT呢?首先得明白BAPI_TRANSACTION_COMMIT这个BAPI的作用.它功劳很大,在SAP里面很多 ...

  7. 读书笔记_Effective_C++_条款四十八:了解模板元编程

    作为模板部分的结束节,本条款谈到了模板元编程,元编程本质上就是将运行期的代价转移到编译期,它利用template编译生成C++源码,举下面阶乘例子: template <int N> st ...

  8. Win7上Git安装及配置过程

    Win7上Git安装及配置过程 文档名称 Win7上Git安装及配置过程 创建时间 2012/8/20 修改时间 2012/8/20 创建人 Baifx 简介(收获) 1.在win7上安装msysgi ...

  9. 用CSS让未知高度内容垂直方向居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  10. Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持

    Spring.Net.FrameworkV3.0 版本发布了,感谢大家的支持. Spring.Net.Framework,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开 ...