职责链模式(案例:请假审批权限)

职责链模式(案例:请假审批权限:小组长->经理->…)

​ 在软件设计中,职责链模式(Chain of Responsibility Pattern)是一种行为设计模式,用于将请求的发送者和接收者解耦。在Java中实现职责链模式通常涉及创建多个处理对象(handler),这些对象构成一条链,每个处理对象都有机会处理请求或将其传递给链中的下一个对象。

职责链模式的核心组成部分:

  1. 处理器接口(Handler Interface):定义了处理请求的方法。所有的具体处理器都必须实现这个接口。
  2. 具体处理器(Concrete Handlers):实现处理器接口的类,每个类都处理它能处理的请求,并决定是否将请求传递到链上的下一个处理器。
  3. 客户端(Client):启动请求传递到职责链的起点
1. 创建处理器
public abstract class Leader {
    private String name;
    protected Leader supirior; //上级领导  即职责链

	//抽象方法  请假天数
    public abstract void handleRequest(int days);

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

	// 	即职责链       name:本人    supirior:上级领导
    public Leader(String name, Leader supirior) {
        this.name = name;
        this.supirior = supirior;
    }

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

    public void setSupirior(Leader supirior) {
        this.supirior = supirior;
    }

    public String getName() {
        return name;
    }

    public Leader getSupirior() {
        return supirior;
    }
}

2. 定义具体处理器
//小组长处理
public class Grouper extends Leader{
    public Grouper(String name) {
        super(name);
    }
    //请假的具体实现
    public void handleRequest(int days) {
        if(days <= 1){
            System.out.println( "小组长:"+this.getName()+"批准请假:"+days+"天!");
        }else{
            if (this.getSupirior()!=null){  //权限不够 则推给上级领导处理
                this.getSupirior().handleRequest(  days );
            }else {
                System.out.println("请假天数超过权限");
            }
        }
    }
}

//经理处理
public class Manager extends Leader{
    public Manager(String name) {
        super(name);
    }
    //请假的具体实现
    public void handleRequest(int days) {
        if(days <= 3){
            System.out.println( "经理:"+this.getName()+"批准请假:"+days+"天!");
        }else{
            if (this.getSupirior()!=null){  //权限不够 则推给上级领导处理
                this.getSupirior().handleRequest(  days );
            }else {
                System.out.println("请假天数超过权限!");
            }
        }
    }
}

3. 客户端使用
//开闭原则 : 对修改关闭   对扩展开发
public class App {
    public static void main(String[] args) {
        //组装职责链
        Leader grouper = new Grouper("小组长张三");
        //小组长上加经理
        Leader manager = new Manager("经理李四");
        grouper.setSupirior(manager);
        //经理上加总经理
        /*
        Leader generalManager = new GeneralManager("总经理lili");
        manager.setSupirior(generalManager);

        //总经理上加老板
        Leader boss = new Boss("老板小明");
        generalManager.setSupirior(boss);
		*/
		//请假3天
        grouper.handleRequest(3);

    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值