责任链模式
案例分析
责任链模式可以通过形象的生活例子进行解读,不管是前端攻城狮还是后端攻城狮,责任链的思想都有所体现(框架之中)
击鼓传花
老太和一群姑娘准备玩击鼓传花的游戏,于是找来了一个击鼓的人,游戏规则就是:随着鼓点声音,从她们之间传递一束花,鼓声落,传花停。花最后传递到那个姑娘的手中,那么就由她来给大家即兴赋诗一首。
那么击鼓的人并不需要知道玩游戏的这些人是谁,只需要击鼓即可,相当于客户端发送一个请求,请求在这些姑娘之间传递,总会有一个姑娘最后接到花,给大家赋诗。(一层层的传递请求,总会有一层来对请求作出响应)
什么是责任链模式?
将接受者对象连成一条链,并在改链上传递请求,直到有一个接受者对象处理它,通过让更多对象有机会处理请求,避免了请求发送者和接受者之间的耦合。
前驱
中序遍历下某结点X的前驱就是所有(结点值)小于X的结点中最大的那个
后继
给定一个二叉查找树中的结点,有时候要求找出在中序遍历顺序下它的后继。如果所有的关键字均不同,则某一结X点的后继就是所有(结点值)大于X的结点中最小的那个。
1、OO的一些原则:
2、如 单一职责原则 : 设置一个接口时,应该只将与这个接口业务相关的方法放在接口之中。
3、工场方法的实质在用返回返回的是一个接口,而不是一个实例对象。
4、用到责任链,总会用到工厂
将指定的方法移到某个文件中的快捷键操作方式:
选中方法名——Refactor——Move——选择需要移动到的目标文件——确定
责任链模式-解耦
发出请求的客户端并不知道链上的哪一个接收者会处理这个请求,从而实现了客户端和接受者之间的解耦。
责任链模式的应用
图片不显示
Java中的异常抛出,一层一层的找到对应的异常类型进行抛出对应的异常
JavaScript中的事件模型
Web中的过滤器
慎重
责任链模式在实际开发中很常见,尤其是框架。但是具体使用责任链模式的时候,应该做好取舍,慎重考虑是否使用,因为责任链模式会先创建出很多的链上的接收者,会消耗资源,占用内存,降低性能。(Java开发团队起初开发AWT的时候使用的就是责任链模式,后来因为性能问题,转为使用观察者模式)