• 设计模式-责任链模式(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

  • 相关阅读:
    acm课程练习2--1002
    acm课程练习2--1001
    SDAU课程练习--problemQ(1016)
    SDAU课程练习--problemG(1006)
    SDAU课程练习--problemO(1014)
    SDAU课程练习--problemB(1001)
    SDAU课程练习--problemA(1000)
    SDAU课程练习--problemC
    SDAU课程练习--problemE
    不安全函数(转)
  • 原文地址:https://www.cnblogs.com/qjm201000/p/10100601.html
Copyright © 2020-2023  润新知