在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.问题现在有一个命令需要层级审批,比如请假, 如果小于等于3天,那么只需要主管审批通过, 如果大于3天小于等于7天,则通过后又需要总监审批通过, 如果大于7天,通过后又需要总经理审批通过。 这样的业务流程如何实现呢?其实这就是一个典型的责任链模式的应用场景。
2.定义命令的请求要经过多层判断,为了避免客户端和处理程序的耦合作用,将处理程序进行抽象,每个对象持有下一个处理对象的引用,就像是链表一样,一级一级的处理,这样的设计方式就叫做责任链模式。
3.代码public abstract class Response { protected Response NextResponse; public abstract void Handle(int dayNum); } public class Director : Response { public Director() { NextResponse = new Chief(); } public override void Handle(int dayNum) { Console.WriteLine("主管审批同意"); if (dayNum > 3) { NextResponse.Handle(dayNum); } } } public class Chief : Response { public Chief() { NextResponse = new TopManager(); } public override void Handle(int dayNum) { Console.WriteLine("总监审批同意"); if (dayNum > 7) { NextResponse.Handle(dayNum); } } } public class TopManager : Response { public override void Handle(int dayNum) { Console.WriteLine("总经理审批同意"); } } 调用的时候只需要 Response direct = new Director(); direct.Handle(5); Console.ReadLine();
4.特点如果没有责任链的话,上面这个代码个人会怎么写呢,应该就是if+else不停地判断吧; 这样虽然没有什么错误,但是一旦判断增加,就不得不修改if语句,而且如果if中的业务逻辑很多的话,也很难维护 因此,责任链模式经常被用来重构if语句。 优点:将多个判断逻辑分别封装到了不同的类中,使代码的层次更明确 缺点:当判断比较多时,会有很多处理类,而且还有性能问题
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论