GOF23设计模式——责任链模式(chainOfResp)

责任链模式


/**
 * 责任链的抽象类(所有领导的基类)
 */
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;
    }

    public abstract void handerRequest(LeaveRequest request);
}


/**
 * 请假的对象
 */
public class LeaveRequest {

    private String empName;//员工姓名
    private int days;//请假天数
    private String reson;//请假原因

    public LeaveRequest(String empName, int days, String reson) {
        this.empName = empName;
        this.days = days;
        this.reson = reson;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public int getDays() {
        return days;
    }

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

    public String getReson() {
        return reson;
    }

    public void setReson(String reson) {
        this.reson = reson;
    }
}
/**
 * 主任
 */
public class Director extends Leader {
    public Director(String name) {
        super(name);
    }

    @Override
    public void handerRequest(LeaveRequest request) {

        //请假三天小于三天,直属上司直接审批
        if (request.getDays() < 3) {
            System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
            System.out.println("主任:"+this.name+"审批通过了!!!!!");
        } else {
            if (nextLeader != null) {
                nextLeader.handerRequest(request);
            }
        }
    }
}

/**
 * 经理
 */
public class Manager extends Leader {
    public Manager(String name) {
        super(name);
    }

    @Override
    public void handerRequest(LeaveRequest request) {

        //请假三天小于三天,直属上司直接审批
        if (request.getDays() < 10) {
            System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
            System.out.println("经理:"+this.name+"审批通过了!!!!!");
        } else {
            if (nextLeader != null) {
                nextLeader.handerRequest(request);
            }
        }
    }
}

/**
 * 总经理
 */
public class GeneralManager extends Leader {
    public GeneralManager(String name) {
        super(name);
    }

    @Override
    public void handerRequest(LeaveRequest request) {

        //请假三天小于三天,直属上司直接审批
        if (request.getDays() < 30) {
            System.out.println("员工:" + request.getEmpName() + "请假,天数为:" + request.getDays() + ",请假原因是:" + request.getReson());
            System.out.println("总经理:" + this.name + "审批通过了!!!!!");
        } else {
            System.out.println("总经理:难道" + request.getEmpName() + "不想干了,居然请假了" + request.getDays()+"天");
        }
    }
}

public class Client {

    public static void main(String[] args) {
        Leader a = new Director("小杨");
        Leader b = new Manager("老王");
        Leader c = new GeneralManager("狼哥");

        //设置责任链的对象关系
        a.setNextLeader(b);
        b.setNextLeader(c);


        LeaveRequest leaveRequest = new LeaveRequest("Tom",40,"世界那么大,我想去看看");
        a.handerRequest(leaveRequest);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值