扫码关注公众号
什么是责任链设计模式?
定义:责任链模式(ChainofResponsibilityPattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。含义解析:定义中提到的两个主体:请求的发送者和请求的接收者.用员工请假来举例.请求发送者是员工,请求接收者是主管们。「对请求的发送者和接收者进行解耦」:意思就是员工发起请假申请和主管审批请假解耦「为请求创建了一个接收者对象的链」:意思是接收者有多个,实现了多个接收者进行审批的链条
责任链设计模式的使用场景?
网关过滤器:一个url请求过来,首先要校验url是否是合法的,不合法过滤掉,合法进入下一层校验;是否是在黑名单中,如果在过滤掉,不在进行下一层校验;校验参数是否合规,不合规过滤掉,合规进入下一层校验,等等请假审批流:请假天数小于3天,直属领导审批即可;天数大于3天,小于10天,要部门主管审批;天数大于10天要总经理审批游戏通关: 完成第一关,并且分数>90,才能进入第二关;完成第二关,分数>80,才能进入第三关等等日志处理:日志的级别从小到大分别是:dubug,info,warn,error console控制台:控制台接收debug级别的日志,那么所有debug,info,warn,error日志内容都打印在console控制台中file文件:file接收info级别的日志,那么info,warn,error级别的日志都会打印到file文件中,但是debug日志不会打印error文件:只接收error级别的日志,其他界别的日志都不接收
责任链设计模式的优缺点?
优点:1.动态组合,使请求者和接受者解耦。2.请求者和接受者松散耦合:请求者不需要知道接受者,也不需要知道如何处理。每个职责对象只负责自己的职责范围,其他的交给后继者。各个组件间完全解耦。3.动态组合职责:职责链模式会把功能分散到单独的职责对象中,然后在使用时动态的组合形成链,从而可以灵活的分配职责对象,也可以灵活的添加改变对象职责。缺点:1.产生很多细粒度的对象:因为功能处理都分散到了单独的职责对象中,每个对象功能单一,要把整个流程处理完,需要很多的职责对象,会产生大量的细粒度职责对象。2.不一定能处理:每个职责对象都只负责自己的部分,这样就可以出现某个请求,即使把整个链走完,都没有职责对象处理它。这就需要提供默认处理,并且注意构造链的有效性。
以下哪个是适合使用责任链模式的情况()
正确答案是BCD适合使用责任链模式的情况:1、在许多对象可以处理用户请求的时候2、希望用户不必明确处理者的时候,同时向多个处理者发送请求3、程序希望动态的订制可处理用户请求的集合对象因此选项A错误,BCD正确。