用asp.net做的网站框架,天津津坤科技发展有限公司,广州网站建设的公司,网站优化网站建站教程软件设计模式#xff08;Design pattern#xff09;#xff0c;又称设计模式#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接… 软件设计模式Design pattern又称设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接【玩转23种Java设计模式】学习目录汇总整理 文章目录 一、简介二、实例1、请假类LeaveRequest2、处理器接口LeaveRequestHandler3、经理处理器Manager4、总监处理器Commissioner5、CTO处理器CTO6、客户端Client 三、总结1、优点2、缺点3、应用场景 一、简介 责任链模式Chain of Responsibility一种行为型设计模式它为请求创建了一个接收者对象的链。这种模式给予了请求的处理更多的灵活性可以动态地决定请求由哪个对象来处理。实际上每个接收者对象都包含对另一个接收者对象的引用如果当前对象无法处理请求它会将请求传递给下一个接收者对象。
主要角色
抽象处理器Handler处理器接口定义了处理请求的方法通常会有一个处理请求的方法和设置下一个处理器的方法。具体处理器ConcreteHandler具体处理器实现处理器接口处理请求或将请求传递给链上的下一个处理器。客户端Client客户端负责构建处理器链并向链上的第一个处理器发送请求。
二、实例
例如员工请假请假2天内经理审批超过2天不大于5天总监审批超过5天CTO审批。
1、请假类LeaveRequest
public class LeaveRequest {private int days;public LeaveRequest(int days) {this.days days;}public int getDays() {return days;}
}2、处理器接口LeaveRequestHandler
public interface LeaveRequestHandler {void setNextHandler(LeaveRequestHandler nextHandler);void handleRequest(LeaveRequest request);
}3、经理处理器Manager
Slf4j
public class Manager implements LeaveRequestHandler {private LeaveRequestHandler nextHandler;Overridepublic void setNextHandler(LeaveRequestHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic void handleRequest(LeaveRequest request) {if (request.getDays() 2) {log.info(审批流程处理 - 经理);} else if (nextHandler ! null) {nextHandler.handleRequest(request);}}
}4、总监处理器Commissioner
Slf4j
public class Commissioner implements LeaveRequestHandler {private LeaveRequestHandler nextHandler;Overridepublic void setNextHandler(LeaveRequestHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic void handleRequest(LeaveRequest request) {if (request.getDays() 5) {log.info(审批流程处理 - 总监);} else {nextHandler.handleRequest(request);}}
}5、CTO处理器CTO
Slf4j
public class CTO implements LeaveRequestHandler {private LeaveRequestHandler nextHandler;Overridepublic void setNextHandler(LeaveRequestHandler nextHandler) {this.nextHandler nextHandler;}Overridepublic void handleRequest(LeaveRequest request) {if (request.getDays() 5) {log.info(审批流程处理 - CTO);} else {log.info(没有流程节点);}}
}6、客户端Client
Slf4j
public class Client {public static void main(String[] args) {LeaveRequestHandler manager new Manager();LeaveRequestHandler commissioner new Commissioner();LeaveRequestHandler cto new CTO();manager.setNextHandler(commissioner);commissioner.setNextHandler(cto);log.info(请假10天);LeaveRequest request new LeaveRequest(10);manager.handleRequest(request);}
}输出控制台
请假10天
审批流程处理 - CTO三、总结
1、优点
降低耦合度。将请求的发送者和接收者解耦。简化对象。对象不需要知道链的结构。增加新的请求处理类很方便。增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序允许动态地新增或者删除责任。
2、缺点
不能保证请求一定被接收。对比较长的职责链系统性能将受到一定影响。而且在进行代码调试时不太方便可能会造成循环调用。
3、应用场景
有多个对象可以处理同一个请求具体哪个对象处理该请求由运行时刻自动确定。在不明确指定接收者的情况下向多个对象中的一个提交一个请求。可动态指定一组对象处理请求。