设计模式学习笔记(18)——责任链模式

版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/weixin_36904568/article/details/90072234

1. 定义

很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。责任链可能是一条直线、一个环链或者一个树结构的一部分。

2. 使用

  • 抽象处理者:定义出一个处理请求的接口
  • 具体处理者:接到请求后,可以将请求处理掉,或者将请求传给下一个

(1)处理器

package ChainOfResponsibilityPattern;

/**
 * 抽象处理器
 */
public abstract class Handler {

    //下一个对象
    private Handler next;

    //处理业务
    public abstract void handler(String text);

    public Handler getNext() {
        return next;
    }

    public void setNext(Handler next) {
        this.next = next;
    }
}

package ChainOfResponsibilityPattern;

/**
 * 具体处理类
 */
public class HandlerA extends Handler {

    @Override
    public void handler(String text) {
        //可以处理
        if (text.startsWith("A"))
            System.out.println("开始对A类业务的处理");
        //不可以处理
        else{
            Handler handler = getNext();
            if (handler == null){
                System.out.println("已经没有对象了");
                return;
            }
            //传递给下一个对象
            else
                handler.handler(text);
        }
    }
}

package ChainOfResponsibilityPattern;

/**
 * 具体处理类
 */
public class HandlerB extends Handler {

    @Override
    public void handler(String text) {
        //可以处理
        if (text.startsWith("B"))
            System.out.println("开始对B类业务的处理");
            //不可以处理
        else{
            Handler handler = getNext();
            if (handler == null){
                System.out.println("已经没有对象了");
                return;
            }
            //传递给下一个对象
            else
                handler.handler(text);
        }
    }
}

(2)测试

package ChainOfResponsibilityPattern;

public class Test {
    public static void main(String[] args) {
        Handler handlerA = new HandlerA();
        Handler handlerB = new HandlerB();
        handlerA.setNext(handlerB);
        System.out.println("处理A型事务");
        handlerA.handler("A");
        System.out.println("处理B型事务");
        handlerA.handler("B");
        System.out.println("处理C型事务");
        handlerA.handler("C");
    }
}

3. 特点

  • 请求的发送者和接受者解耦
  • 系统可以在不影响客户端的情况下重新组织和分配责任(对责任链进行修改)
  • 不容易观察运行时的特征
  • 并不保证请求一定会被执行

猜你喜欢

转载自blog.csdn.net/weixin_36904568/article/details/90072234
今日推荐