【GOF23设计模式】责任链模式
来源: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设计模式】责任链模式的更多相关文章
- java 设计模式 -- 责任链模式
设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...
- 浅谈Python设计模式 -- 责任链模式
声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 之前在最开始就聊了Python设计模式有三种,其中关于创建型和结构型设计模式基本 ...
- 【设计模式】Java设计模式 - 责任链模式
[设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...
- 我的Java设计模式-责任链模式
今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...
- Java设计模式-责任链模式
提出问题: 最初接触责任链模式就是在struts2中,在当时学的时候看了一眼,大概知道了原理,最近在复习,模拟struts2,说是模拟只是大体模拟了struts2的工作流程,很多东西都是写死的,只是为 ...
- Java与设计模式-责任链模式
责任链模式属于行为型设计模式之中的一个,怎么理解责任链?责任链是能够理解成数个对象首尾连接而成,每个节点就是一个对象.每个对象相应不同的处理逻辑,直至有一个对象响应处理请求结束.这一种模式成为责任链模 ...
- php设计模式-责任链模式
责任链模式更像是一种简化多种场景下调用处理的一种设计模式,特别适合if-else分支判断很多的场景.比如是根据不同会员等级给予不同的优惠力度. 它的定义:对象的调用是由下家的应用连接起来的处理链.一直 ...
- C#设计模式-责任链模式(Chain of Responsibility Pattern)
引子 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现.现在以请假流程为例,一般公 ...
- php 23种设计模式 - 责任链模式
责任链模式 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行 ...
- 23种设计模式--责任链模式-Chain of Responsibility Pattern
一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...
随机推荐
- wav 转换到 flac
参考自:http://so.trust.blog.163.com/blog/static/17188620020127197618621/ wav 无损无压缩: flac无损压缩 将 wav 转换到 ...
- Oracle数据库入门——物化视图语法
一.Oracle物化视图语法 create materialized view [view_name]refresh [fast|complete|force][on [commit|demand] ...
- Unit Of Work--工作单元(二)
回顾 上一篇我们根据工作单元的原理基于ADO.NET进行了简单的实现,但是当项目需求发生变化的时候,比如需要引入ORM框架又要兼容当前ADO.NET实现的方式时,先前的实现就无法满足这个需求了. 话就 ...
- Java知多少(111)数据库之修改记录
修改数据表记录也有3种方案. 一.使用Statement对象 实现修改数据表记录的SQL语句的语法是: update表名 set 字段名1 = 字段值1,字段名2 = 字段值2,……where特 ...
- Spring Remoting: HTTP Invoker--转
原文地址:http://www.studytrails.com/frameworks/spring/spring-remoting-http-invoker.jsp Concept Overview ...
- Office Web Apps Server 概述
Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.PowerPoint.Excel 和 OneNote 的基于浏览器的版本.单个 Office Web ...
- 任督二脉之Shell中的正则表达式
VBird说学习Linux,掌握了Shell和正则就相当于打通了任督二脉,此后能力的成长才会突飞猛进. Shell的基础学习之前已经总结了一篇博客:http://www.cnblogs.com/jyz ...
- 免费素材下载:iOS 8 矢量 UI 素材套件
小伙伴们,苹果终于在今天凌晨推送了 iOS 8 的正式版.虽然该系统并未与 iPhone6 发布会同时亮相,但对于已经提前体验尝鲜过测试版的同学来说并不陌生.iOS 8 几乎每个图标都进行了重新设计, ...
- 『设计前沿』14款精致的国外 iOS7 图标设计示例
每天都有大量的应用程序发布到 iOS App Store 上,在数量巨大的应用中想要引起用户的主要,首要的就是独特的图标设计.这篇文章收集了14款精致的国外 iOS7 图标设计示例,希望能带给你设计灵 ...
- iOS-Block的多种使用
一.图 二.代码 1.viewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewControll ...