空壳网站清理通知,uniapp小程序开发教程,正规网站建设定制,黑龙江省城乡和建设厅网站一、什么是职责链模式 职责链模式是一种行为型设计模式#xff0c;它允许将请求沿着处理者的链进行传递#xff0c;直到有一个处理者能够处理它为止。换句话说#xff0c;它将请求的发送者和接收者解耦#xff0c;使得多个对象都有机会处理这个请求#xff0c;从而避免了将…一、什么是职责链模式 职责链模式是一种行为型设计模式它允许将请求沿着处理者的链进行传递直到有一个处理者能够处理它为止。换句话说它将请求的发送者和接收者解耦使得多个对象都有机会处理这个请求从而避免了将请求直接发送给具体的处理者。 在职责链模式中多个处理者对象形成一个链客户端将请求传递给链中的第一个处理者由第一个处理者决定是自己处理请求还是将请求传递给下一个处理者直到请求被处理或者链末尾没有处理者为止。
二、职责链模式的结构
Handler处理者定义处理请求的接口并且可以访问下一个处理者。ConcreteHandler具体处理者实现了处理请求的具体逻辑如果能够处理该请求则处理它如果不能处理则将请求传递给链中的下一个处理者。Client客户端发起请求并传递给链中的第一个处理者。
三、职责链模式的优点
降低耦合性请求发送者和请求接收者解耦发送者无需知道具体处理者。灵活性可以灵活地组织处理者链可以动态地改变链的结构。简化代码职责链模式可以避免多重条件语句使代码更简洁。
四、职责链模式的缺点
链过长如果链太长可能会导致性能问题。处理不当如果没有合适的处理者可能会造成请求得不到处理。
五、案例讲解客服支持系统 假设我们有一个客服支持系统客户提交的问题根据其优先级需要经过不同层级的客服人员处理。优先级较低的问题由初级客服处理优先级较高的问题由技术支持人员处理如果问题依然没有解决那么会交给经理来处理。 我们可以使用职责链模式来处理这个场景。以下是完整的代码实现。
六、代码实现
1.问题设计SupportTicket
public class SupportTicket {private String description; // 问题描述private int priority; // 问题优先级数值越大表示优先级越高public SupportTicket(String description, int priority) {this.description description;this.priority priority;}public String getDescription() {return description;}public int getPriority() {return priority;}
}SupportTicket 类表示客户提交的问题包含问题的描述和优先级。
2.抽象支持处理者SupportHandler
public abstract class SupportHandler {private SupportHandler nextHandler; // 下一个处理者// 设置下一个处理者public void setNextHandler(SupportHandler nextHandler){this.nextHandler nextHandler;}// 获取下一个处理者public SupportHandler getNextHandler(){return nextHandler;}// 处理请求的方法public abstract void handleTicket(SupportTicket ticket);
}SupportHandler 是职责链模式中的抽象处理者它定义了处理请求的方法 handleTicket并且维护了一个指向下一个处理者的引用nextHandler。
3.初级支持处理者JuniorSupport
public class JuniorSupport extends SupportHandler{Overridepublic void handleTicket(SupportTicket ticket) {if(ticket.getPriority() 2){System.out.println(初级客服处理问题ticket.getDescription());} else if (getNextHandler() ! null) {getNextHandler().handleTicket(ticket); // 传递给下一个处理者} else {System.out.println(问题过大需要汇报给总部处理);}}
}JuniorSupport 是一个具体处理者类当问题的优先级小于等于 2 时它会处理该问题。如果问题优先级较高它会将请求传递给下一个处理者。
4.技术支持处理者TechSupport
public class TechSupport extends SupportHandler{Overridepublic void handleTicket(SupportTicket ticket) {if(ticket.getPriority() 4){System.out.println(技术员处理问题ticket.getDescription());} else if (getNextHandler() ! null) {getNextHandler().handleTicket(ticket); // 传递给下一个处理者} else {System.out.println(问题过大需要汇报给总部处理);}}
}TechSupport 处理优先级小于等于 4 的问题其他问题会传递给下一个处理者。
5.经理支持处理者ManagerSupport
public class ManagerSupport extends SupportHandler{Overridepublic void handleTicket(SupportTicket ticket) {if(ticket.getPriority() 10){System.out.println(经理处理问题ticket.getDescription());} else if (getNextHandler() ! null) {getNextHandler().handleTicket(ticket);} else {System.out.println(问题过大需要汇报给总部处理);}}
}ManagerSupport 处理优先级小于等于 10 的问题其他问题会传递给下一个处理者直到链的末尾。
6.测试类TestChain
public class TestChain {public static void main(String[] args) {// 问题声明SupportTicket ticket1 new SupportTicket(线路混乱, 1);SupportTicket ticket2 new SupportTicket(服务器异常, 113);// 处理者声明SupportHandler handler1 new JuniorSupport();SupportHandler handler2 new TechSupport();SupportHandler handler3 new ManagerSupport();// 处理者链的组装handler1.setNextHandler(handler2);handler2.setNextHandler(handler3);// 问题处理的传递handler1.handleTicket(ticket1);handler1.handleTicket(ticket2);}
}在 TestChain 中我们创建了三个处理者JuniorSupport、TechSupport、ManagerSupport并将它们串联成一个处理链。当请求传递给第一个处理者时若它不能处理请求就将请求交给下一个处理者直到找到合适的处理者或者到达链的末尾。
7. 总结 职责链模式通过将请求沿着处理者链进行传递使得每个处理者只关心自己能处理的请求从而减少了发送者与接收者之间的耦合。职责链模式有助于系统的灵活扩展因为我们可以在运行时动态地调整处理链结构。通过这种模式能够实现请求的逐层处理直到有一个处理者能够处理该请求为止。