java 之 职责链模式(大话设计模式)
目前很多OA办公自动化软件,加快了办公效率,简化流程。相信很多小伙伴都用过。笔者了解到的大多数办公软件底层实现流程大多数采用的都是Activity或者是JBPM框架。
今天笔者要说的也是类似于流程的一个设计模式,职责模式。
先看下类图
大话设计模式-类图

看完类图,不知道大家有没有想到职责链模式似曾相识。笔者觉得此模式和状态模式很类似。不过笔者以为职责模式更为灵活些,可以在客户端就规定好流程。而状态模式则是在实现时流程已经定死。
简单看下笔者的Demo
/**
* 请求
*/
public class Request { private int breakDay; private String requestName; public Request(int breakDay, String requestName) {
super();
this.breakDay = breakDay;
this.requestName = requestName;
} public int getBreakDay() {
return breakDay;
} public void setBreakDay(int breakDay) {
this.breakDay = breakDay;
} public String getRequestName() {
return requestName;
} public void setRequestName(String requestName) {
this.requestName = requestName;
}
}
/**
* 抽象父类
*/
public abstract class Handler { private Handler handler; public Handler(Handler handler) {
super();
this.handler = handler;
} public abstract void handleRequest(Request request); public Handler getHandler() {
return handler;
} public void setHandler(Handler handler) {
this.handler = handler;
}
}
/**
* 经理
*/
public class Manager extends Handler{ public Manager(Handler handler) {
super(handler);
} @Override
public void handleRequest(Request request) {
if (request.getBreakDay() < 10) {
System.out.println("经理批准你去休息了");
} else {
System.out.println("经理无权处理");
super.getHandler().handleRequest(request);
}
} }
/**
* 总经理
*/
public class AllManager extends Handler { public AllManager(Handler handler) {
super(handler);
} @Override
public void handleRequest(Request request) {
if (request.getBreakDay() < 20) {
System.out.println("总经理批准你去休息");
} else {
System.out.println("总经理无权处理");
super.getHandler().handleRequest(request);
}
} }
/**
* 老板
*/
public class Boss extends Handler { public Boss(Handler handler) {
super(handler);
} @Override
public void handleRequest(Request request) {
System.out.println("BOSS 批准你去休息。小心点吧!");
} }
/**
* 客户端
*/
public class Test { public static void main(String[] args) {
Request request = new Request(40, "请假休息");
Handler boos = new Boss(null);
Handler allManager = new AllManager(boos);
Handler manager = new Manager(allManager);
manager.handleRequest(request);
}
}
输出结果为
经理无权处理
总经理无权处理
BOSS 批准你去休息。小心点吧!
以上是笔者对职责链模式的理解,希望能帮助学习职责连的小伙伴理解此模式。
java 之 职责链模式(大话设计模式)的更多相关文章
- OOP设计模式[JAVA]——03职责链模式
职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 设计模式之职责链模式(JAVA实现)
学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...
- Java设计模式(二十一):职责链模式
职责链模式(Chain Of Responsibility Pattern) 职责链模式(Chain Of Responsibility Pattern):属于对象的行为模式.使多个对象都有机会处理请 ...
- Java设计模式之《职责链模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6530089.html 职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形 ...
- 设计模式之第13章-职责链模式(Java实现)
设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...
- Java设计模式之责任链模式、职责链模式
本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...
- 大话设计模式Python实现-职责链模式
职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...
- java设计模式-----18、职责链模式
概念: Chain of Responsibility(CoR)模式也叫职责链模式.责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的 ...
随机推荐
- 1034: [ZJOI2008]泡泡堂BNB
1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3234 Solved: 1655[Submit][St ...
- poj 2459 Sumsets
Sumsets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11612 Accepted: 3189 Descript ...
- 爆炸快求1~n有多少素数
这个求一千亿以内的素数大约用6780ms #include <stdio.h> #include <iostream> #include <string.h> #i ...
- Tomcat请求头过大
今天开发反应Tomcat的请求头过大 <Connector port="8280" protocol="HTTP/1.1" connectionTimeo ...
- HTML学习笔记 cs2D3D展示基础 第十四节 (原创) 参考使用表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 一个“”字引发的痛苦经历
(一篇老文章,还有点价值,特意整理了一下.由于涉及客户项目,已经进行了脱敏处理) 1 写在前面的话 虽然这个问题是有解决方案的,但我不建议大家提供给客户,理由见此. 2 问题描述 2010.10.12 ...
- Windows系统安装MySQL
在Windows中安装mysql不够幸运的话,会遇到相当多的坑,当然这也算是一种财富吧,让自己碰到问题去查找解决方案.有时候不是一时半会就可以解决的.有同学说过安装mysql安装两天还没有装上.不用担 ...
- 按键精灵 vbs 获取网页源码 xp系统被拒绝
如下面的代码所示,获取新浪博客某个指定网页的源码 verurl = "http://blog.sina.com.cn/s/blog_9ea1db7b0101o7ch.html?" ...
- unlink()
unlink() 函数删除文件. 若成功,则返回 true,失败则返回 false. 语法 unlink(filename,context) 参数 描述 filename 必需.规定要删除的文件. c ...
- C#操作Excel(读取)
一.使用OleDb,这个法子好像不大好使.容易读错.引用System.Data.OleDb; /**//// <summary> /// 返回Excel数据源 ...