目前很多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. Intervals

    Intervals Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  2. javascript 之变量对象-09

    变量对象 变量对象:每个执行环境(执行上下文)都有一个对应的变量对象(variable object),环境中(执行上下文中)定义的所有变量.函数都保存在这个对象中. 在上篇中说到,当执行流执行一个函 ...

  3. display:none和visibility:hidden区别

    <!-- display:none和visible:hidden都能把网页上某个元素隐藏起来,但两者有区别: --> <!-- display:none 不为被隐藏的对象保留其物理空 ...

  4. UWP Composition API - RadialMenu

    用Windows 8.1的童鞋应该知道OneNote里面有一个RadialMenu.如下图,下图是WIn10应用Drawboard PDF的RadialMenu,Win8.1的机器不好找了.哈哈,由于 ...

  5. ab使用命令

    ab使用-A auth-username:password    向服务器提供基本认证信息.用户名和密码之间":"分割,以base64编码形式发送.无论服务器是否需要(即是否发送了 ...

  6. 【5】namenode启动过程

    1.格式化空间(第一次启动的操作): 命令:bin/hadoop -format //用于格式化HDFS,如果不是首次格式化,需要删除下面配置的tmp目录后再进行core-site.xml的配置: / ...

  7. git(2)----Git的常用撤销技巧与解决冲突方法

    git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash pop回复. git rese ...

  8. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

  9. java之JVM学习--基本机构

    JDK,JRE,JVM关系图 JVM物理结构: jvm内存区详解: 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字 ...

  10. Python之matplotlib学习(二)

    例子6.中文标签测试 #!/usr/bin/env python2.7 #-*- coding:utf-8 -*- import matplotlib.pyplot as plt import num ...