设计模式-责任链模式(responsibility)

责任链模式是行为模式的一种,该模式构造一系列的分别担当不同职责的类的对象(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

posted @ 2018-12-11 09:55  qjm201000  阅读(189)  评论(0编辑  收藏  举报