目前很多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. ajax跨域请求解决方案

    大家好,今天我们学习了js的跨域请求的解决方案,由于JS中存在同源策略,当请求不同协议名,不同端口号.不同主机名下面的文件时,将会违背同源策略,无法请求成功!需要进行跨域处理! 方案一.后台PHP进行 ...

  2. 磁盘管理之 raid 文件系统 分区

    第1章 RAID 磁盘阵列 1.1 使用raid的目的 1)获得更大的容量 2)让数据更安全 3)读写速度更快 1.2 raid0.raid1.raid5.raid10对比 磁头 0磁道 1扇区 前4 ...

  3. linux中必会的目录

    第1章 find命令扩展 1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面. [root@znix ~]# find /oldboy/ -type f -name " ...

  4. 桌面消息通知:HTML5 Notification

    先上一段完整代码 //注册权限 Notification.requestPermission(function (status) { // 这将使我们能在 Chrome/Safari 中使用 Noti ...

  5. css中单位px和em,rem的区别[转载]

    PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem,但是96%以上 ...

  6. linux-mkdir

    mkdir mkdir : 可以用来创建目录,如果不加创建路径即在本路径下创建一个新的指定的目录,否则即在给出的路径下创建目录. 目录创建:目录名尽量见名知意,根据不同需要分层创建,尽量避免在同一目录 ...

  7. Oracle Database 12c Release 2安装详解

    第1章 Oracle Database 12c Release 2安装详解 1.1 下载方法 oracle官网https://www.oracle.com 1)打开官方网站,找到下载连接 2)选择更多 ...

  8. python3随笔第一天

    1.python 语言没有{},注重书写格式,注重空格的使用,书写python程序一定要注意代码对齐,代码格式对齐是python程序书写的生命: 2.python 分支判断格式  if 条件 :  e ...

  9. android wear开发:为可穿戴设备创建一个通知 - Creating a Notification for Wearables

    注:本文内容来自:https://developer.android.com/training/wearables/notifications/creating.html 翻译水平有限,如有疏漏,欢迎 ...

  10. JS获取DOM元素

    1.childNodes:获取节点,不同浏览器表现不同: IE:只获取元素节点: 非IE:获取元素节点与文本节点: 解决方案:if(childNode.nodeName=="#text&qu ...