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 设计模式 -- 责任链模式
设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...
随机推荐
- 关于一些基础的Java问题的解答(四)
16. Java面向对象的三个特征与含义 java中的面向对象的三大基本特征分别是:封装.继承.多态: 封装:把过程和数据包围起来,对数据的访问只能通过已定义的界面,主要是方便类的修改 继承:对象的一 ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
- android基础-界面开发注意事项
做安卓开发时一定要注意,主线程不能更改UI界面,如果出现程序运行时崩溃的情况,如果没有明显的语法错误,请检查自己的进程是否出现冲突,崩溃.如果有与后台的连接,即请求向服务器发送请求的时尤其需要注意,或 ...
- 【转】使用virtualenv在ubuntu上搭建python 3开发环境
ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题.比如要使用pip安装软件包时,默认安装的就是python2的包.如果想安装python3的包,就需要 ...
- Linux(八)用户管理
8.1 基本介绍 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账户,然后以这个账户身份进入系统. Linux的用户需要至少要属于一个组. 8 ...
- 深度解读GoogleNet之Inception V1
GoogleNet设计的目的 GoogleNet设计的初衷是为了提高在网络里面的计算资源的利用率. Motivation 网络越大,意味着网络的参数较多,尤其当数据集很小的时候,网络更容易发生过拟合. ...
- Java中使用CountDownLatch进行多线程同步
CountDownLatch介绍 在前面的Java学习笔记中,总结了Java中进行多线程同步的几个方法: 1.synchronized关键字进行同步. 2.Lock锁接口及其实现类ReentrantL ...
- 加解密、PKI与CA基础
介绍 这门知识如果以前尝过的各位想必都知道:枯燥无比!因此在文中我会尽量讲的生动些,举一些例子,并试图以一个完整的例子来贯穿整个讲述过程.今年又恰逢莎翁逝世400周年,一方面也为了纪念这位伟大的作家. ...
- Windows下Java如何调用本地获取mac地址
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- 【SSH系列】一步步深入springmvc+商品列表查询demo
在前面的博文中,小编主要简单的介绍springmvc的体系结构.mvc模式的优缺点以及mvc框架,今天我们来继续学习springmvc的相关知识,在这篇博文中,小编讲解过springmvc的体系结构, ...