设计模式-职责链模式
我们总有请假的时候,每个单位可能制度都不一样,但都对请假时间长短有规定不同流程。例如 0.5-1 天假向经理报告,2-3 天假向 hr 报告,3以上的假期需总经理或老板签字等等。既然有这种状况,程序也务必会遇到此类情况,要说的就是处理此类问题时可能用到的设计模式——职责链模式。
示例,当前我有个请假的请求发送至上司,≤5天由 SimpleRequestHandler
处理,反之,SpecialRequestHandler
处理。
//请求
class Request {
private String name;
private int day;
public Request(String name, int day) {
this.name = name;
this.day = day;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
}
//处理器抽象类
abstract class Handler {
private Handler successor;
public Handler getSuccessor() {
return successor;
}
public void setSuccessor(Handler successor) {
this.successor = successor;
}
abstract String handle(Request request);
}
//简易请求处理器
class SimpleRequestHandler extends Handler {
@Override
public String handle(Request request) {
//加强健壮性,防止没有后续处理器而报空指针
if(request.getDay() < 5 && getSuccessor() != null) {
return getSuccessor().handle(request);
}
return request.getName() + "请≤5天假 >>>>> 批准";
}
}
//特殊请求处理器
class SpecialRequestHandler extends Handler {
@Override
public String handle(Request request) {
return request.getName() + "请≥5天假 >>>>> 批准";
}
}
public class ChainOfResponsibility {
public static void main(String[] args) {
//TOM请≤5天假 >>>>> 批准
Request request = new Request("TOM", 1);
//TIM请≥5天假 >>>>> 批准
Request request = new Request("TIM", 11);
Handler handler = new SimpleRequestHandler();
handler.setSuccessor(new SpecialRequestHandler());
System.out.println(handler.handle(request));
}
}
有上面 main 方法的三句代码可见的,对于每个请求来说,只需要面对一个处理器即可,大大的降低请求与处理的耦合。除此之外,也能让每个处理器有机会处理请求。
Handler handler = new SimpleRequestHandler();
handler.setSuccessor(new SpecialRequestHandler());
handler.handle(new Request("TOM", 1));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 设计模式-观察者模式
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论