责任链模式

责任链模式 简单就是说 如果要根据某个条件处理多个不同的事情。如果正常让你来写代码。if else 或者各种case 语句就能搞定了。但是责任链模式觉得这样不好。耦合大。为了解耦。把各种真正else里头实际的处理者或者叫对象抽象出来。形成一个所谓的接口或者抽象类。这个抽象类有一个对象。这个处理对象的恰好是这个类同类型。这个接口还有一个抽象处理方法。这个方法也很诡异。一个简单的if else 。else里头的逻辑就是用刚才的对象再调用这个方法。是不是有点递归的意思了。这个其实不能叫递归。因为毕竟是调用的对象的方法。不是直接调用方法本身。下马结合代码再看。
责任链模式_第1张图片
责任链模式_第2张图片
责任链模式_第3张图片
看了代码。确实各个类之间确实没啥耦合OneHander不知道TwoHander。但是疑问来了。那实际调用者呢。你总要setNextHander吧。看代码。
责任链模式_第4张图片
看了代码。疑惑就解开了。就是处理链条完全在调用者这里。自己设定链条的走势。你可以设定a-b 也可以设定b-a 。当然如果有c。可以abc 也可以acb。反正可以自己设定。是不是感觉有点写netty hander的意思。没错。就是这个路数。记住就是链条的意思。当然还有servlet的filter。都是一个事件或者一个请求过来。要走一圈处理的时候。记住用责任链模式

你可能感兴趣的:(设计模式)