滨城区亿耀图文设计中心

平面设计/图文设计/签名设计/UI设计/名片设计

解耦与灵活:决策链设计模式在请假审批系统中的应用

决策设计模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者与接收者之间的耦合。在这个模式中,通常会有一系列处理对象(Handler),每个对象都包含对下一个处理对象的引用。当一个请求进入时,它首先被当前处理对象处理,如果当前对象不能处理该请求,它会将请求传递给下一个处理对象,依此类推,直到请求被处理或者到达链的末端。

详细说明

1. 结构

  • Handler(处理者接口定义一个处理请求的接口,通常包含一个设置下一个处理者的方法(如 setNextHandler)和一个处理请求的方法(如 handleRequest)。
  • ConcreteHandler(具体处理者):实现处理者接口,处理它负责的请求。如果它不能处理该请求,则将请求传递给下一个处理者。
  • Client(客户端)创建处理链,并向链头的处理者发送请求。

2. 工作流程

  1. 客户端创建一个处理链,通常是通过设置每个处理者的下一个处理者来实现。
  2. 客户端向链头的处理者发送请求。
  3. 链头的处理者首先尝试处理请求,如果它能够处理,则处理请求并结束流程;如果不能处理,则将请求传递给下一个处理者。
  4. 这个过程一直持续到请求被处理或者到达链的末端。

3. 优点

  • 解耦:请求发送者不需要知道哪个对象会处理请求,处理者也不需要知道请求的发送者。
  • 灵活:可以动态改变处理链的结构,增加或删除处理者。
  • 单一职责原则:每个处理者只负责处理特定类型的请求,符合单一职责原则。

4. 缺点

  • 请求可能未被处理:如果链中没有任何处理者能够处理请求,请求可能会被忽略。
  • 性能问题:如果链过长,请求可能需要经过多个处理者才能被处理,影响性能。

案例

假设我们有一个请假审批系统员工可以提交请假申请,申请需要经过不同级别的审批:组长、经理总监。每个级别的审批者只能审批一定天数以内的请假申请,超过其权限的申请需要传递给下一个级别的审批者。

解耦与灵活:决策链设计模式在请假审批系统中的应用

代码示例

// Handler接口
interface LeaveApprover {
    void setNextApprover(LeaveApprover nextApprover);
    void approveLeave(int days);
}

// 具体处理者:组长
class TeamLeader implements LeaveApprover {
    private LeaveApprover nextApprover;

    @Override
    public void setNextApprover(LeaveApprover nextApprover) {
        this.nextApprover = nextApprover;
    }

    @Override
    public void approveLeave(int days) {
        if (days <= 2) {
            System.out.println("Team Leader approved the leave request.");
        } else if (nextApprover != null) {
            nextApprover.approveLeave(days);
        } else {
            System.out.println("Leave request cannot be approved.");
        }
    }
}

// 具体处理者:经理
class Manager implements LeaveApprover {
    private LeaveApprover nextApprover;

    @Override
    public void setNextApprover(LeaveApprover nextApprover) {
        this.nextApprover = nextApprover;
    }

    @Override
    public void approveLeave(int days) {
        if (days <= 5) {
            System.out.println("Manager approved the leave request.");
        } else if (nextApprover != null) {
            nextApprover.approveLeave(days);
        } else {
            System.out.println("Leave request cannot be approved.");
        }
    }
}

// 具体处理者:总监
class Director implements LeaveApprover {
    private LeaveApprover nextApprover;

    @Override
    public void setNextApprover(LeaveApprover nextApprover) {
        this.nextApprover = nextApprover;
    }

    @Override
    public void approveLeave(int days) {
        if (days <= 10) {
            System.out.println("Director approved the leave request.");
        } else if (nextApprover != null) {
            nextApprover.approveLeave(days);
        } else {
            System.out.println("Leave request cannot be approved.");
        }
    }
}

// 客户端
public class LeaveApprovalSystem {
    public static void main(String[] args) {
        // 创建处理链
        LeaveApprover teamLeader = new TeamLeader();
        LeaveApprover manager = new Manager();
        LeaveApprover director = new Director();

        teamLeader.setNextApprover(manager);
        manager.setNextApprover(director);

        // 提交请假申请
        teamLeader.approveLeave(3);  // 经理审批
        teamLeader.approveLeave(7);  // 总监审批
        teamLeader.approveLeave(15); // 无法审批
    }
}

在这个案例中,我们通过决策链设计模式实现了请假审批系统。每个级别的审批者只能处理一定天数以内的请假申请,超过其权限的申请会传递给下一个级别的审批者。这样,我们实现了请求的灵活处理,并且避免了请求发送者与接收者之间的耦合。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言

    Powered By 滨城区亿耀图文设计中心

    Copyright www.lcrstlp.com Some Rights Reserved. 鲁ICP备2023008258号-29