java设计模式---职责链模式
- /**
- * 定义职责对象的接口
- *
- */
- public abstract class Handler {
- protected Handler successor;
- /**
- * 设置下一个处理请求对象
- * @param successor
- */
- public void setSuccessor(Handler successor) {
- this.successor = successor;
- }
- /**
- * 处理聚餐费用的申请
- * @param user 申请人
- * @param fee 申请的费用
- * @return
- */
- public abstract String handlerFeeRequest(String user, double fee);
- }
- /**
- * 部门经理审批
- *
- */
- public class DepManager extends Handler {
- @Override
- public String handlerFeeRequest(String user, double fee) {
- String str = "";
- if(fee < 1000) {
- if("Joe".equals(user)) {
- str = "Department manager agreed " + user + "'s request, the fee is $" + fee;
- } else {
- str = "Department manager didn't agree " + user + "'s request.";
- }
- return str;
- }
- // more than $1000, next to others.
- if(this.successor != null) {
- return successor.handlerFeeRequest(user, fee);
- }
- return str;
- }
- }
- /**
- * 项目经理审批
- *
- */
- public class ProjectManager extends Handler {
- @Override
- public String handlerFeeRequest(String user, double fee) {
- String str = "";
- if(fee < 500) {
- if("Joe".equals(user)) {
- str = "Project manager agreed " + user + "'s request, the fee is $" + fee;
- } else {
- str = "Project manager didn't agree " + user + "'s request.";
- }
- return str;
- }
- // more than $500, next to others.
- if(this.successor != null) {
- return successor.handlerFeeRequest(user, fee);
- }
- return str;
- }
- }
- /**
- * 总经理审批
- *
- */
- public class GeneralManager extends Handler {
- @Override
- public String handlerFeeRequest(String user, double fee) {
- String str = "";
- if(fee >= 1000) {
- if("Joe".equals(user)) {
- str = "General manager agreed " + user + "'s request, the fee is $" + fee;
- } else {
- str = "General manager didn't agree " + user + "'s request.";
- }
- return str;
- }
- // next to others.
- if(this.successor != null) {
- return successor.handlerFeeRequest(user, fee);
- }
- return str;
- }
- }
- public class Client {
- public static void main(String[] args) {
- Handler h1 = new ProjectManager();
- Handler h2 = new DepManager();
- Handler h3 = new GeneralManager();
- h2.setSuccessor(h3);
- h1.setSuccessor(h2);
- String ret1 = h1.handlerFeeRequest("Joe", 300);
- System.out.println(ret1);
- String ret2 = h1.handlerFeeRequest("Yoyo", 300);
- System.out.println(ret2);
- String ret3 = h1.handlerFeeRequest("Joe", 800);
- System.out.println(ret3);
- String ret4 = h1.handlerFeeRequest("Yoyo", 800);
- System.out.println(ret4);
- String ret5 = h1.handlerFeeRequest("Joe", 1300);
- System.out.println(ret5);
- String ret6 = h1.handlerFeeRequest("Yoyo", 1300);
- System.out.println(ret6);
- }
- }
java设计模式---职责链模式的更多相关文章
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 【设计模式】Java设计模式 - 责任链模式
[设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...
- OOP设计模式[JAVA]——03职责链模式
职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...
- java 之 职责链模式(大话设计模式)
目前很多OA办公自动化软件,加快了办公效率,简化流程.相信很多小伙伴都用过.笔者了解到的大多数办公软件底层实现流程大多数采用的都是Activity或者是JBPM框架. 今天笔者要说的也是类似于流程的一 ...
- 设计模式:职责链模式(Chain of Responsibility)
去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- C++设计模式——职责链模式
什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条 ...
- java 设计模式 -- 责任链模式
设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...
随机推荐
- IOI2016Day2. Messy
题目链接:http://uoj.ac/problem/239 题目大意: 这是一道交互题,交互库维护了一个数据结构,可以存储n为二进制串,一开始你可以向空的数据结构中插入若干二进制串, 接下来这个数据 ...
- day04 Java Web 开发入门
day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...
- all unicode
Unicode Chart Range Decimal Name 0x0000-0x007F 0-127 Basic Latin 0x0080-0x00FF 128-255 Latin-1 Suppl ...
- MFC误报内存泄露的修复
在debug状态退出程序的时候,VS会在输出窗口列出可能的内存泄露的地方. MFC中使用DEBUG_NEW能够更方便的定位泄露的地点.但假如MFC的dll释放""过早"& ...
- 潜谈IT从业人员在传统IT和互联网之间的择业问题(下)-互联网公司
互联网带来的一片晴天 相对于传统行业来说,互联网行业要显得相对对技术人员尊重些. 在互联网行业中,采用的技术.概念也较传统形行业来说要新,技术人员也容易在此找到自己的一方净土. 因为互联网这个行当讲究 ...
- springMVC源码分析--AbstractControllerUrlHandlerMapping(六)
上一篇博客springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)中我们介绍了AbstractDetectingUrlHandlerMapping,其定 ...
- 详解EBS接口开发之库存事务处理-物料批次导入
库存事务处理-物料批次导入 --系统批次表 SELECT * FROM MTL_LOT_NUMBERS T; --API创建批次 inv_lot_api_pub.create_inv_lot(x_re ...
- Swift中不用桥接文件和.h头文件直接和C代码交互的方法
我们知道一般情况下Swit要想调用obj-c,c或c++代码必须通过obj-c以及桥接文件才可以办到,但是对于某些简单的代码,我们可以跳过桥接文件和.h头文件,直接和C代码交互呢! 我们再Projec ...
- 安卓Button-TextView-EditText综合运用
1.如何使用安卓中的按键Button? 1.先从控件库拖一个按钮button的控件,在XML设置好宽高等参数 对应的就是Button这个图标,直接拖出来即可; 以下是设置这个按钮对应的XML代码: & ...
- volatile足以保证数据同步吗
上一节已经了解了java内存模型,JMM为了提高执行性能,引入了工作内存和主存两个概念,在继续讨论之前必须先搞清四种存储介质:寄存器.高级缓存.RAM和ROM. RAM与ROM大家都比较熟悉了,可以看 ...