栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

责任链设计模式chain of responsibility

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

责任链设计模式chain of responsibility

将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上对象逐个判断是否有能力处理请求,能就处理,不能就向上提交。

代码演示:

1.请假条请求类LeaveRequest :

public class LeaveRequest {
    private String empName;
    private int leaveDays;
    private String season;

    public LeaveRequest() {
    }

    public LeaveRequest(String empName, int leaveDays, String season) {
        this.empName = empName;
        this.leaveDays = leaveDays;
        this.season = season;
    }

    public String getEmpName() {
        return empName;
    }

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

    public int getLeaveDays() {
        return leaveDays;
    }

    public void setLeaveDays(int leaveDays) {
        this.leaveDays = leaveDays;
    }

    public String getSeason() {
        return season;
    }

    public void setSeason(String season) {
        this.season = season;
    }
}

 2.抽象事物处理者,抽象类Leader :

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;
    }

    
    abstract void handleRequest(LeaveRequest request);


}

3.三个具体事物处理对象:

(1).主任对象Director 

public class Director extends Leader {
    public Director(String name) {
        super(name);
    }

    @Override
    void handleRequest(LeaveRequest request) {
        if (request.getLeaveDays()<3){
            System.out.println("员工:"+request.getEmpName());
            System.out.println("请假:"+request.getLeaveDays()+"天");
            System.out.println("理由:"+request.getSeason());
            System.out.println("主任:"+this.name+"通过");
        }else {
            if (this.nextLeader!=null){
                this.nextLeader.handleRequest(request);
            }
        }
    }
}

(2).经理对象Manager

class Manager extends Leader {

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

    @Override
    void handleRequest(LeaveRequest request) {
        if (request.getLeaveDays()<10){
            System.out.println("员工:"+request.getEmpName());
            System.out.println("请假:"+request.getLeaveDays()+"天");
            System.out.println("理由:"+request.getSeason());
            System.out.println("经理:"+this.name+"通过");
        }else {
            if (this.nextLeader!=null){
                this.nextLeader.handleRequest(request);
            }
        }
    }
}

(3).总经理对象GeneraManager

 class GeneraManager extends Leader{
    public GeneraManager(String name) {
        super(name);
    }

    @Override
    void handleRequest(LeaveRequest request) {
        if (request.getLeaveDays()<30){
            System.out.println("员工:"+request.getEmpName());
            System.out.println("请假:"+request.getLeaveDays()+"天");
            System.out.println("理由:"+request.getSeason());
            System.out.println("总经理:"+this.name+"通过");
        }else {
            System.out.println("莫非:"+request.getEmpName()+"不想干了?");
        }
    }
}

4.测试

public class App {
    public static void main(String[] args) {
        Leader director =new Director("张三");
        Leader manager =new Manager("李四");
        Leader generaManager=new GeneraManager("王五");

        //组织责任链对象关系
        director.setNextLeader(manager);
        manager.setNextLeader(generaManager);

        //开始请假
        LeaveRequest request=new LeaveRequest("罗翔",11,"去b站直播");
        director.handleRequest(request);
    }
}

结果:员工:罗翔
          请假:11天
          理由:去b站直播
          总经理:王五通过

应用场景:异常捕捉,servelet中过滤器。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294953.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号