责任链模式

概述

责任链模式:如果有多个对象都有机会处理请求,责任链可使请求的发送者和接收者解耦,请求沿着责任链传递,直到有一个对象处理了它为止

示例

首先定义一个抽象类用来做接口调用对象

package com.kun.chainofresponsibility.chainms;

/**
 * @author kun
 * @data 2019/4/1 20:10
 */
public abstract class AbstractApprover {
    AbstractApprover successor;
    String name;
    AbstractApprover(String name){
        this.name = name;
    }

    /**
     * 处理请求
     * @param request 请求
     */
    public abstract void processRequest(PurchaseRequest request);
    public void setSuccessor(AbstractApprover successor){
        this.successor = successor;
    }
}

 

其中successor则是下个要执行的handler

package com.kun.chainofresponsibility.chainms;

/**
 * @author kun
 * @data 2019/4/1 20:13
 */
public class DepartmentApprover extends AbstractApprover {
    public DepartmentApprover(String name){
        super(name + " DepartmentLeader");
    }
    @Override
    public void processRequest(PurchaseRequest request) {
        if ((5000<= request.getSum()) && (request.getSum() < 10000)){
            System.out.println("**This request " + request.getID() + " will be handled by " + this.name + " **");
        }else {
            successor.processRequest(request);
        }
    }
}
package com.kun.chainofresponsibility.chainms;

/**
 * @author kun
 * @data 2019/4/1 20:13
 */
public class PresidentApprover extends AbstractApprover {
    public PresidentApprover(String name){
        super(name + " President");
    }
    @Override
    public void processRequest(PurchaseRequest request) {
        if (50000 <= request.getSum()){
            System.out.println("**This request " + request.getID() + " will be handled by " + this.name + " **");
        }else {
            successor.processRequest(request);
        }
    }
}

 

其余的同上

接下来用法展示

package com.kun.chainofresponsibility;

import com.kun.chainofresponsibility.chainms.*;

/**
 * @author kun
 * @data 2019/4/1 20:30
 */
public class MainTest {
    public static void main(String[] args) {
        Client client = new Client();
        AbstractApprover groupLeader = new GroupApprover("Tom");
        AbstractApprover departmentLeader = new DepartmentApprover("Jerry");
        AbstractApprover vicePresident = new VicePresidentApprover("Kate");
        AbstractApprover president = new PresidentApprover("Bush");
        groupLeader.setSuccessor(departmentLeader);
        departmentLeader.setSuccessor(vicePresident);
        vicePresident.setSuccessor(president);
        president.setSuccessor(groupLeader);
        groupLeader.processRequest(client.sendRequest(1, 100, 40));
        groupLeader.processRequest(client.sendRequest(2, 200, 40));
        groupLeader.processRequest(client.sendRequest(3, 300, 40));
        groupLeader.processRequest(client.sendRequest(4, 400, 140));
    }
}由上可见通过给当前运行的handler中传入下个执行的handler从而可以达到链式执行的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值