无废话设计模式(20)行为型模式--职责链模式

0-前言

  职责链模式定义:

    使多个对象都有机会处理请求,从而避免请求的发送者喝接受者之间的耦合关系。

    将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止。

1-实现

1-1、简单UML图

 

1-2、代码实现

//1、处理请求的抽象父类
abstract class Handler
{
    //A、设置下一处理节点
    protected Handler NestHandler;
    public void setNestHandler(Handler nestHandler)
    {
        NestHandler = nestHandler;
    }
    //B、处理方法
    public abstract void HandlerRequest(int count);

}

//1-1、具体的请求处理者A
 class HandlerHR extends Handler
{
    //B、处理方法
    @Override
    public void HandlerRequest(int count)
    {
        if (count<5) //能处理,直接处理
        {
            System.out.println("才招几个人,HR经理直接就能决定--------------");
        }
        else //不能处理,交给下一个节点处理
        {
            if (NestHandler !=null)
            {
                System.out.println("招聘人数超过5个,HR经理无权定夺,交给下一节点处理:--------------------");
                NestHandler.HandlerRequest(count);
            }
        }
    }
}

//1-1、具体的请求处理者A
class HandlerBoss extends Handler
{
    //B、处理方法
    @Override
    public void HandlerRequest(int count)
    {
        if (count>5) //能处理
        {
            System.out.println("招超过5个人,老板我来拍板");
        }
        else //还不能处理,继续交给链的下一个节点处理....
        {
        }
    }
}

客户端

        Handler hr = new HandlerHR();
        Handler boss = new HandlerBoss();
        hr.setNestHandler(boss);

        hr.HandlerRequest(4);
        hr.HandlerRequest(6);

运行结果

2、应用场景简单总结

1、当有多个对象可以处理同一个请求,而具体哪个对象来处理这个请求在运行时刻需要自动判定时;

2、当需要在不明确接受者的情况下向多个对象中某一个提交请求时;

3、当处理一个请求的对象集合应该动态地被确定时

原文地址:https://www.cnblogs.com/yanghj/p/13454681.html