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 设计模式 -- 责任链模式
设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...
随机推荐
- 【转】动态规划DP
[数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...
- hive 集成 hbase NoClassDefFoundError: org/apache/htrace/Trace
更新了hive版本后,在创建hive外部表 级联hbase 的时候报如下异常: hive (default)> create external table weblogs(id string,d ...
- 新手级配置 react react-router4.0 redux fetch sass
前言 最近公司来了几个实习生,刚好我手头没什么要紧事,然后领导让我带他们学习react, 为下一个react项目做基础. 然后随手写了几个demo,帮助他们了解正经项目如何去构建配置项目. 现在分享出 ...
- Go 语言范围(Range)
Go 语言中 range 关键字用于for循环中迭代数组(array).切片(slice).链表(channel)或集合(map)的元素.在数组和切片中它返回元素的索引值,在集合中返回 key-val ...
- 阅读源码(III)
往期系列: <由阅读源码想到> <由阅读源码想到 | 下篇> Medium上有一篇文章Why You Don't Deserve That Dream Developer Jo ...
- Android------Android.mk调用shell脚本
$(info $(shell ($(LOCAL_PATH)/echo_test.sh)))
- 基于AOP的iOS用户操作引导框架设计
背景 有一种现象,App设计者觉得理所当然的操作方式,却常常被用户所忽视,为了防止这种现象发生,就要为App设计一个帮助,一种低成本的方案是将帮助文档写成HTML然后展示给用户,这样的方式常常不能带来 ...
- Java经典设计模式之十一种行为型模式(附实例和详解)
Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...
- hadoop入门级总结二:Map/Reduce
在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制.接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架: ...
- [boost] build boost with intel compiler 16.0.XXX
Introduction There are few information about how to compile boost with Intel compiler. This article ...