目前很多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 之 职责链模式(大话设计模式)的更多相关文章

  1. OOP设计模式[JAVA]——03职责链模式

    职责链模式 Responsibility of Chain 在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求 ...

  2. JAVA 设计模式 职责链模式

    用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...

  3. 设计模式之职责链模式(JAVA实现)

    学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...

  4. Java设计模式(二十一):职责链模式

    职责链模式(Chain Of Responsibility Pattern) 职责链模式(Chain Of Responsibility Pattern):属于对象的行为模式.使多个对象都有机会处理请 ...

  5. Java设计模式之《职责链模式》及应用场景

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6530089.html 职责链模式(称责任链模式)将请求的处理对象像一条长链一般组合起来,形 ...

  6. 设计模式之第13章-职责链模式(Java实现)

    设计模式之第13章-职责链模式(Java实现) “请假都那么麻烦,至于么.”“咋的了?”“这不快过年了么,所以我想早两天回去,准备一下,买买东西什么的,然后去给项目经理请假,但是他说快过年了,所以这个 ...

  7. Java设计模式之责任链模式、职责链模式

    本文继续介绍23种设计模式系列之职责链模式.   什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组.   职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...

  8. 大话设计模式Python实现-职责链模式

    职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免发送者和接收者的耦合关系.将对象连成链并沿着这条链传递请求直到被处理 下面是一个设计模式的demo: ...

  9. java设计模式-----18、职责链模式

    概念: Chain of Responsibility(CoR)模式也叫职责链模式.责任链模式或者职责连锁模式,是行为模式之一,该模式构造一系列分别担当不同的职责的类的对象来共同完成一个任务,这些类的 ...

随机推荐

  1. poj 2345 Central heating

    Central heating Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 678   Accepted: 310 Des ...

  2. C#语言支持的特性,.NET却不支持,那么C#不被.NET支持的部分又是如何在.NET上运行的呢?

    阅读<C#高级编程>系列丛书中,介绍C#与.NET的关系,提到C#是语言,.NET是平台(C#不是.NET的一部分),说".NET支持的一些特性,C#并不支持",这个可 ...

  3. http 状态

    用户如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求.此状态 ...

  4. ⑾bootstrap组件 徽章 大屏 页头 基础案例

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. ueditor 和 umeditor 粘贴过滤问题

    最近遇到需要将WORD WPS等复制的带有格式的内容粘贴到富文本编辑器里面去掉冗余的HTML,只保留最有用的部分. 第一步肯定是先查官方文档了. http://fex.baidu.com/uedito ...

  6. Velocity(5)——#macro 指令

    1 #macro(formatIncreaseData $increase) 2 #if(${product.onlineStatusFlag} =='0') 3 -- 4 #elseif(!$inc ...

  7. C#中抽象类与接口的区别

    1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象 ...

  8. .net表达式计算器(中缀表达式转后缀表达式,支持20多个数学函数,支持函数嵌套)

    最近在网上查了一下表达工计算器的类库,发现Java版本的有一个比较成熟的叫W3EVal,好像是一个IBM工程师写的,.net就很少了(可能是我了解不够多),但投机取巧的实现思路有很多,比如: (1)将 ...

  9. C#调用DLL文件时参数对应表

    Wtypes.h中的非托管类型  非托管 C语言类型    托管类名               说明HANDLE                  void*               Syste ...

  10. java 导出blob图片到excel

    实现功能,导出当前页面显示员工的图片,核心代码已给出,仅供参考, 如需转载请注明出处http://www.cnblogs.com/wangjianguang/p/7852060.html 随便再扯2句 ...