• java 之 职责链模式(大话设计模式)


    目前很多OA办公自动化软件,加快了办公效率,简化流程。相信很多小伙伴都用过。笔者了解到的大多数办公软件底层实现流程大多数采用的都是Activity或者是JBPM框架。

    今天笔者要说的也是类似于流程的一个设计模式,职责模式。

    先看下类图

    大话设计模式-类图

    看完类图,不知道大家有没有想到职责链模式似曾相识。笔者觉得此模式和状态模式很类似。不过笔者以为职责模式更为灵活些,可以在客户端就规定好流程。而状态模式则是在实现时流程已经定死。

    简单看下笔者的Demo

    /**
     * 请求
     */
    public class Request {
    
        private int breakDay;
    
        private String requestName;
    
        public Request(int breakDay, String requestName) {
            super();
            this.breakDay = breakDay;
            this.requestName = requestName;
        }
    
        public int getBreakDay() {
            return breakDay;
        }
    
        public void setBreakDay(int breakDay) {
            this.breakDay = breakDay;
        }
    
        public String getRequestName() {
            return requestName;
        }
    
        public void setRequestName(String requestName) {
            this.requestName = requestName;
        }
    }
    /**
     * 抽象父类
     */
    public abstract class Handler {
    
        private Handler handler;
    
        public Handler(Handler handler) {
            super();
            this.handler = handler;
        }
    
        public abstract void handleRequest(Request request);
    
        public Handler getHandler() {
            return handler;
        }
    
        public void setHandler(Handler handler) {
            this.handler = handler;
        }
    }
    /**
     * 经理
     */
    public class Manager extends Handler{
    
        public Manager(Handler handler) {
            super(handler);
        }
    
        @Override
        public void handleRequest(Request request) {
            if (request.getBreakDay() < 10) {
                System.out.println("经理批准你去休息了");
            } else {
                System.out.println("经理无权处理");
                super.getHandler().handleRequest(request);
            }
        }
    
    }
    /**
     * 总经理
     */
    public class AllManager extends Handler {
    
        public AllManager(Handler handler) {
            super(handler);
        }
    
        @Override
        public void handleRequest(Request request) {
            if (request.getBreakDay() < 20) {
                System.out.println("总经理批准你去休息");
            } else {
                System.out.println("总经理无权处理");
                super.getHandler().handleRequest(request);
            }
        }
    
    }
    /**
     * 老板
     */
    public class Boss extends Handler {
    
        public Boss(Handler handler) {
            super(handler);
        }
    
        @Override
        public void handleRequest(Request request) {
            System.out.println("BOSS 批准你去休息。小心点吧!");
        }
    
    }
    /**
     * 客户端
     */
    public class Test {
    
        public static void main(String[] args) {
            Request request = new Request(40, "请假休息");
            Handler boos = new Boss(null);
            Handler allManager = new AllManager(boos);
            Handler manager = new Manager(allManager);
            manager.handleRequest(request);
        }
    }

    输出结果为

    经理无权处理
    总经理无权处理
    BOSS 批准你去休息。小心点吧!

    以上是笔者对职责链模式的理解,希望能帮助学习职责连的小伙伴理解此模式。

  • 相关阅读:
    win7同时安装python2和python3
    Centos6.8安装python3.6
    Typescript的接口
    ES5中的类相关/Typescript的类相关
    Typescript介绍
    Global Interpreter Lock 全局解释器锁
    Go语言设计模式(五)
    Go语言设计模式(四)
    Go语言反射
    Go语言程序设计(三)
  • 原文地址:https://www.cnblogs.com/zhuxiansheng/p/8074045.html
Copyright © 2020-2023  润新知