设计模式入门:责任链模式

个人公众号【爱做梦的锤子】,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片
文章中部分定义和解释性文字,都是引用百度百科,主要的代码及场景应用为本人原创

责任链模式,很多对象由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求。

场景:公司常见的事情——签字,一个待批准的任务,由管理者一层一层的批准

结构

  • 抽象处理者(Handler)角色:定义出一个处理请求的接口,接口中定义有对下家的引用。
  • 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。

设计

这里写图片描述

实现

代码地址:https://github.com/telundusiji/designpattern

抽象处理者

@Data
public abstract class Handler {
    private Handler handler;

    public abstract boolean handleRequest(String task);
}

具体处理者 小组长

@Slf4j
public class TeamLeader extends Handler{
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("组长批准{}",task);
            return getHandler().handleRequest(task);
        }
        log.info("组长驳回{}请求",task);
        return false;
    }
}

具体处理者 部门长

@Slf4j
public class HeadOfDepartment extends Handler {
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("部门长批准{}",task);
            return getHandler().handleRequest(task);
        }
        log.info("部门长驳回{}请求",task);
        return false;
    }
}

具体处理者 技术总监

@Slf4j
public class CTO extends Handler {
    @Override
    public boolean handleRequest(String task) {
        if("task".equals(task)){
            log.info("CTO批准{}",task);
            return true;
        }
        log.info("CTO驳回{}请求",task);
        return false;
    }
}

经典应用

Filter(过滤器)就是一个经典的责任链模式

  • 抽象处理者:Filter
  • 具体处理者:实现Filter的类

个人公众号【爱做梦的锤子】,个站 http://te-amo.site,欢迎关注,里面会分享更多有用知识,还有我的私密照片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值