java 之 职责链模式(大话设计模式)
目前很多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 批准你去休息。小心点吧!
以上是笔者对职责链模式的理解,希望能帮助学习职责连的小伙伴理解此模式。
相关推荐
bearhoopIT之道 2020-08-16
Kakoola 2020-08-01
凯哥Java 2020-07-04
haidaoxianzi 2020-07-04
delmarks 2020-06-28
aNian 2020-06-16
qingjiuquan 2020-06-07
fraternityjava 2020-06-04
明瞳 2020-06-04
HappyHeng 2020-05-28
88473166 2020-05-14
zkwgpp 2020-05-07
oXiaoChong 2020-05-07
ChainDestiny 2020-05-07
doomvsjing 2020-05-07
xuMelon 2020-05-04
MrLiar 2020-04-27