设计模式——责任链模式(Chian Of Responsiblity)

代码:GitHub

责任链设计模式(公司请假示例)

0. UML结构图

责任链模式UML结构图

1. 休假请求Code

public class LeaveRequest {

    private String name;

    private int days;

    private String reason;

    public LeaveRequest(String name, int days, String reason) {
        this.name = name;
        this.days = days;
        this.reason = reason;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getDays() {
        return days;
    }

    public void setDays(int days) {
        this.days = days;
    }

    public String getReason() {
        return reason;
    }

    public void setReason(String reason) {
        this.reason = reason;
    }

    @Override
    public String toString() {
        return "LeaveRequest{" +
                "name='" + name + '\'' +
                ", days=" + days +
                ", reason='" + reason + '\'' +
                '}';
    }

}

2. 责任对象Code

2.1 领导的抽象类

public abstract class Leader {

    /**
     * 人名
     */
    protected String name;

    /**
     * 责任链的下一个对象
     */
    protected Leader nextLeader;

    public Leader(String name) {
        this.name = name;
    }

    public void setNextLeader(Leader nextLeader) {
        this.nextLeader = nextLeader;
    }

    /**
     * 处理休假请求
     * @param leaveRequest 休假请求
     */
    public abstract void handleRequest(LeaveRequest leaveRequest);

}

2.2 责任链第一个对象 - 主任

public class Director extends Leader {

    public Director(String name) {
        super(name);
    }

    @Override
    public void handleRequest(LeaveRequest leaveRequest) {
        if (leaveRequest.getDays() <= 3) {
            System.out.println(this.name + "主任批准了" + leaveRequest.getName() + "的休假!");
        } else {
            if (this.nextLeader != null) {
                this.nextLeader.handleRequest(leaveRequest);
            }
        }
    }

}

2.3 责任链第二个对象 - 经理

public class Manager extends Leader {

    public Manager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(LeaveRequest leaveRequest) {
        if (leaveRequest.getDays() <= 10) {
            System.out.println(this.name + "经理批准了" + leaveRequest.getName() + "的休假!");
        } else {
            if (this.nextLeader != null) {
                this.nextLeader.handleRequest(leaveRequest);
            }
        }
    }

}

2.4 责任链第三个对象 - 总经理

public class GeneralManager extends Leader {

    public GeneralManager(String name) {
        super(name);
    }

    @Override
    public void handleRequest(LeaveRequest leaveRequest) {
        if (leaveRequest.getDays() <= 30) {
            System.out.println(this.name + "总经理批准了" + leaveRequest.getName() + "的休假!");
        } else {
            System.out.println("请假时间过长,不予通过!");
        }
    }

}

3. 公司请假示例Test

public class ChainTest {

    public static void main(String[] args) {
        // 建立责任对象
        Leader bill = new Director("Bill");
        Leader lily = new Manager("Lily");
        Leader white = new GeneralManager("White");

        // 连接责任链
        bill.setNextLeader(lily);
        lily.setNextLeader(white);

        // 构建休假请求
        LeaveRequest leaveRequest = new LeaveRequest("小王", 5, "亲戚结婚,需要参加!");
        System.out.println(leaveRequest);

        // 开始处理请求
        bill.handleRequest(leaveRequest);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值