责任链模式是行为模式的一种,该模式构造一系列的分别担当不同职责的类的对象(HeaderCar、BodyCar、FooterCar)来共同完成一个任务,这些类的对象之间像链条一样紧密相连。
角色和职责:
1.抽象处理者(Handler)-CarHandler:
2.具体处理者(Concrete Handler) -:
UML图:
具体代码:
/** * 汽车类 */ public abstract class CarHandler { protected CarHandler carHandler; public CarHandler setChaimHandler(CarHandler carHandler){ this.carHandler = carHandler; return carHandler; } public abstract void task(); }
/** * 安装车头 */ public class HeaderHandler extends CarHandler{ @Override public void task() { System.out.println("安装车头!"); if(carHandler != null){ carHandler.task(); } } }
/** * 安装车身 */ public class BodyHandler extends CarHandler{ @Override public void task() { System.out.println("安装车身"); if(carHandler != null){ carHandler.task(); } } }
/** * 安装车尾 */ public class FooterHandler extends CarHandler{ @Override public void task() { System.out.println("安装车尾"); if(carHandler != null){ carHandler.task(); } } }
public class Main { public static void main(String[] args) { CarHandler headerHandler = new HeaderHandler();//车头 CarHandler bodyHandler = new BodyHandler();//车身 CarHandler footerHandler = new FooterHandler();//车尾 headerHandler.setChaimHandler(bodyHandler).setChaimHandler(footerHandler); headerHandler.task();//拼装车 } }
结果:
安装车头!
安装车身
安装车尾
优缺点:
优:1.责任的分担,每个类只需要处理自己该处理的工作,明确各类的责任范围,符合类的最小封装原则;
2.可以根据需要自由组合工作流程。
3.类和类之间松耦合
缺:因为处理时以链的形式在对象间传递消息,根据实现方式不同,可能影响处理速度
应用场景:
1.比如客户要完成一个任务,任务包括a,b,c,d四个部分。首先把任务交给a,a完成后交给b,b完成后交给c,c完成交给d
2.政府某项工作,县政府完成自己能处理的部分,不能处理的交给市政府。市政府处理自己能处理的部分,不能处理的交给省政府。
3.软件窗口的消息传递
4.过滤器filter的实现。
源码地址:https://github.com/qjm201000/design_pattern_responsibility.git