zoukankan      html  css  js  c++  java
  • 责任链设计模式Demo

      实现功能:请假审批流程,请假3天以内,主任审批;请假3-10天,经理审批;请假10天以上,总经理审批。

    1.定义一个请假请求LeaveRequest的类。

     1 public class LeaveRequest {
     2         private String name;//请假人姓名
     3         private int days;//请假天数
     4         private String reason;//请假原因
     5 
     6         public LeaveRequest(String name, int days, String reason) {
     7             this.name = name;
     8             this.days = days;
     9             this.reason = reason;
    10         }
    11 
    12         public String getName() {
    13             return name;
    14         }
    15 
    16         public void setName(String name) {
    17             this.name = name;
    18         }
    19 
    20         public int getDays() {
    21             return days;
    22         }
    23 
    24         public void setDays(int days) {
    25             this.days = days;
    26         }
    27 
    28         public String getReason() {
    29             return reason;
    30         }
    31 
    32         public void setReason(String reason) {
    33             this.reason = reason;
    34         }
    35     }

    2.定义一个Leader的抽象类,有一个上级领导的nextLeader属性,还有一个处理请假请求handleRequest()的方法

     1 public abstract class Leader {
     2     protected String name;
     3     protected Leader nextLeader;//责任链后期对象
     4     public Leader(){
     5 
     6     }
     7 
     8     public Leader(String name){
     9         super();
    10         this.name=name;
    11     }
    12 
    13     public void setNextLeader(Leader nextLeader) {
    14         this.nextLeader = nextLeader;
    15     }
    16 
    17     //处理请求核心业务方法
    18     public abstract void handleRequest(LeaveRequest leaveRequest);
    19 }

    3.定义一个Director的子类,重写父类方法,3天以内主任处理,3天以上,交给上级领导

    public class Director extends Leader {
    
        public Director(String name){
            super(name);
        }
        @Override
        public void handleRequest(LeaveRequest leaveRequest) {
            if (leaveRequest.getDays()<3){
                //处理
                System.out.println("主任审批通过...");
            }else {
                //处理不了,给下处理
                this.nextLeader.handleRequest(leaveRequest);
            }
        }
    }

    4.同理,Manager类只处理3-10天的请假。

     1 public class Manager extends Leader{
     2     public Manager(String name){
     3         super(name);
     4     }
     5     @Override
     6     public void handleRequest(LeaveRequest leaveRequest) {
     7         if (leaveRequest.getDays()>3&&leaveRequest.getDays()<=10){
     8             System.out.println("经理审批成功");
     9         }else {
    10             this.nextLeader.handleRequest(leaveRequest);
    11         }
    12     }
    13 }

    5.GeneralMmanger类处理10天以上的请假

     1 public class GeneralManager extends Leader {
     2     public GeneralManager(String name){
     3         super(name);
     4     }
     5     @Override
     6     public void handleRequest(LeaveRequest leaveRequest) {
     7         if (leaveRequest.getDays()<30){
     8             System.out.println("总经理审批通过...");
     9         }else {
    10             System.out.println(leaveRequest.getName()+":想辞职吧!");
    11         }
    12     }
    13 }

    6.测试类代码

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         Director director = new Director("主任");
     5         Manager manager = new Manager("经理");
     6         GeneralManager generalManager = new GeneralManager("总经理");
     7         director.setNextLeader(manager);
     8         manager.setNextLeader(generalManager);
     9         LeaveRequest leaveRequest = new LeaveRequest("洪昶", 1, "面试");
    10         director.handleRequest(leaveRequest);
    11     }
    12 }

    7.结果展示

  • 相关阅读:
    Lintcode: Wood Cut
    Lintcode: Update Bits
    Lintcode: Route Between Two Nodes in Graph
    Lintcode: Flip Bits
    Leetcode: Maximum Size Subarray Sum Equals k
    Lintcode: Subarray Sum Closest
    Lintcode: Remove Node in Binary Search Tree
    Lintcode: Majority Number III
    Leetcode: Range Sum Query
    Leetcode: Create Maximum Number
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/11502406.html
Copyright © 2011-2022 走看看