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

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

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

先看下类图

大话设计模式-类图

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

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

简单看下笔者的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 批准你去休息。小心点吧!

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

相关推荐