JAVA设计模式之【职责链模式】
职责链模式
专门处理请求链式传递的模式
角色
Handler抽象处理者
ConcreteHandler具体处理者
在职责链模式中,很多对象由每一个对象对其下家的引用而连接成一条链,请求在这条链上传递,直到链上的某一个对象决定处理次请求。
具体处理类的作用。
1.处理请求,handleRequest。
2.转发请求,如果该请求超出了当前处理类的权限,可以转发给下家。
看例子,批复休假
1.休假请求类
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class LeaveRequest // 休假请求
{
private String leaveName; // 休假人
private int leaveDays; // 休假天数
public LeaveRequest(String leaveName,int leaveDays)
{
this.leaveName=leaveName;
this.leaveDays=leaveDays;
}
public void setLeaveName(String leaveName) {
this.leaveName = leaveName;
}
public void setLeaveDays(int leaveDays) {
this.leaveDays = leaveDays;
}
public String getLeaveName() {
return (this.leaveName);
}
public int getLeaveDays() {
return (this.leaveDays);
}
}
2.抽象处理类
public abstract class Leader // 抽象处理者
{
protected String name;
protected Leader successor;
public Leader(String name)
{
this.name=name;
}
public void setSuccessor(Leader successor)
{ // 设置下一个处理者
this.successor=successor;
}
public abstract void handleRequest(LeaveRequest request); // 处理请求
}
3.主任
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class Director extends Leader // 主任
{
public Director(String name)
{
super(name);
}
public void handleRequest(LeaveRequest request)
{
if(request.getLeaveDays()<3) // 小于三天主任审批
{
System.out.println("主任" + name + "审批员工" + request.getLeaveName() + "的请假条,请假天数为" + request.getLeaveDays() + "天。");
}
else
{
if(this.successor!=null)
{
this.successor.handleRequest(request);
}
}
}
}
4.经理
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class Manager extends Leader // 经理审批
{
public Manager(String name)
{
super(name);
}
public void handleRequest(LeaveRequest request)
{
if(request.getLeaveDays()<10)
{
System.out.println("经理" + name + "审批员工" + request.getLeaveName() + "的请假条,请假天数为" + request.getLeaveDays() + "天。");
}
else
{
if(this.successor!=null)
{
this.successor.handleRequest(request);
}
}
}
}
5.副总经理
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class ViceGeneralManager extends Leader // 副总经理
{
public ViceGeneralManager(String name)
{
super(name);
}
public void handleRequest(LeaveRequest request)
{
if(request.getLeaveDays()<20)
{
System.out.println("副总经理" + name + "审批员工" + request.getLeaveName() + "的请假条,请假天数为" + request.getLeaveDays() + "天。");
}
else
{
if(this.successor!=null)
{
this.successor.handleRequest(request);
}
}
}
}
6.总经理
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class GeneralManager extends Leader // 总经理审批
{
public GeneralManager(String name)
{
super(name);
}
public void handleRequest(LeaveRequest request)
{
if(request.getLeaveDays()<30)
{
System.out.println("总经理" + name + "审批员工" + request.getLeaveName() + "的请假条,请假天数为" + request.getLeaveDays() + "天。");
}
else
{
System.out.println("莫非" + request.getLeaveName() + "想辞职,居然请假" + request.getLeaveDays() + "天。");
}
}
}
7.客户端
package CoR;
/**
* Created by Jiqing on 2016/10/22.
*/
public class Client
{
public static void main(String args[])
{
Leader objDirector,objManager,objGeneralManager,objViceGeneralManager;
objDirector=new Director("王明");
objManager=new Manager("赵强");
objGeneralManager=new GeneralManager("李波");
objViceGeneralManager=new ViceGeneralManager("肖红");
// 建立职责链
objDirector.setSuccessor(objManager); // 主任上级是经理
objManager.setSuccessor(objViceGeneralManager); // 经理上级是副经理
objViceGeneralManager.setSuccessor(objGeneralManager); // 副经理上级是总经理
LeaveRequest lr1=new LeaveRequest("张三",2);
objDirector.handleRequest(lr1);
LeaveRequest lr2=new LeaveRequest("李四",5);
objDirector.handleRequest(lr2);
LeaveRequest lr3=new LeaveRequest("王五",15);
objDirector.handleRequest(lr3);
LeaveRequest lr4=new LeaveRequest("赵六",25);
objDirector.handleRequest(lr4);
}
}
亮点就在职责链上。
看结果:
主任王明审批员工张三的请假条,请假天数为2天。
经理赵强审批员工李四的请假条,请假天数为5天。
副总经理肖红审批员工王五的请假条,请假天数为15天。
总经理李波审批员工赵六的请假条,请假天数为25天。

JAVA设计模式之【职责链模式】的更多相关文章
- java设计模式之职责链模式
责任链模式 设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象. 此模式基于请求的类型将请求的发送方和接收方分离.通常每个接收器包含对另一个接收器的引用.如果一个对象不能 ...
- 设计模式之职责链模式(JAVA实现)
学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...
- php设计模式之职责链模式
<?php /** * @desc php设计模式之职责链模式(责任链模式) 定义:顾名思义,责任链模式为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这 ...
- 设计模式-利用职责链模式消除if
本文是对职责链设计模式的应用(变种),所以假设读者已经掌握了职责链设计模式,职责链模式只会应景简介. 本文主要内容: 需求(ShitCode) 职责链模式简介 设计理念 代码演示(消除if) 应用总结 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
- Java设计模式之职责型模式总结
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6548127.html 所谓职责型模式,就是采用各种模式来分配各个类的职责. 职责型模式包括 ...
- Java设计模式之职责链设计模式
1.什么是-职责链设计模式 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...
- Java设计模式---ChainOfResponsibility责任链模式
参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...
- 设计模式:职责链模式(Chain Of Responsibility)
定 义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 结构图: 处理请求类: //抽象处理类 abs ...
- 设计模式之职责链模式(Chain of Responsibility)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
随机推荐
- Android SQLiteDatabase分析
Android中的数据存储使用的小巧的SQLite数据库. 为了方便java层使用SQLite,android做了大量的封装.提供了一些列的类和API.本文章就揭露这些封装背后的类图关系. 老规矩,首 ...
- SOAPUI 安装及破解
转自:https://blog.csdn.net/henni_719/article/details/79000130 先下载SOAPUI,我这里用的是5.1.2 PRO 版 下载路径:http:/ ...
- nginx的安装步骤
nginx学习资料;https://zhuanlan.zhihu.com/p/34943332 1.下载nginx的安装包:https://nginx.org/en/download.html 2. ...
- .NET Core 开发:永远的Hello Word
从.NET Core发布到现在已经很长一段时间了,园子里的各路大神也和它打的火热,本着与时俱进,啥火学啥的原则,我也开始了我的.NET Core学习之旅. 简介 .NET从2002年发行到现在,从呱呱 ...
- 高并发之web服务器负载均衡简单介绍
负载均衡种类 F5,七层负载均衡,四层负载均衡 Nginx负载均衡 内置策略.扩展策略 内置策略:IPHash.加权轮询 扩展策略:fair策略.通用hash.一致性hash 加权轮询策略 首先将请求 ...
- js面向对象概念解析
ECMAScript有两种开发模式: 1.函数式(过程化) 2.面向对象(OOP). 面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScri ...
- 洛谷P3746 [六省联考2017]组合数问题
题目描述 组合数 C_n^mCnm 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...
- 教你用3ds max制作多边形小狗建模
本教程是一篇关于用3ds max来制作多边形小狗建模的简易教程,介绍地很详细,制作出来的狗很有特色,转发过来,感兴趣的朋友可以过来学习一下! 建立一个BOX,把物体放到空间原点上(这样在以后调节中间点 ...
- ZBrush软件特性之Marker标记调控板
在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...
- Java基础——Servlet
什么是Servlet Servlet是Java Web的三大组件之一,它属于动态资源.Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要: l ...