java设计模式-职责链模式

职责链模式


  • 职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
  1. 责任链模式并不创建责任链,责任链的创建必须由系统的其他部分创建
  2. 责任链模式不指定责任链的拓扑结构,一个链可以使一条线、一个树,也可以是一个环;链的拓扑结构可以是单连通或多连通
  3. 责任链模式要求在同一个时间里,命令只可以传给一个下家(或处理掉),不可以传给多个下家
  4. 在一个责任链上可以传递数个命令
public class Request {
}
public class LeaveRequest extends Request{
}
public class DimissionRequest extends Request{
}
public class AddMoneyRequest extends Request{
}
public interface RequestHandle {
    void handleRequest(Request request);
}
public class HRRequestHandle implements RequestHandle {
    @Override
    public void handleRequest(Request request) {
        if (request instanceof DimissionRequest) {
            System.out.println("要离职,人事审批...");
        }
        System.out.println("请求完毕...");
    }
}
public class PMRequestHandle implements RequestHandle {

    RequestHandle requestHandle;

    public PMRequestHandle(RequestHandle rh) {
        this.requestHandle = rh;
    }

    @Override
    public void handleRequest(Request request) {
        if (request instanceof AddMoneyRequest) {
            System.out.println("要加薪,项目经理审批...");
        } else {
            requestHandle.handleRequest(request);
        }
    }
}
public class TLRequestHandle implements RequestHandle {

    RequestHandle requestHandle;

    public TLRequestHandle(RequestHandle requestHandle) {
        this.requestHandle = requestHandle;
    }

    @Override
    public void handleRequest(Request request) {
        if (request instanceof LeaveRequest) {
            System.out.println("要请假,项目组长审批...");
        } else {
            requestHandle.handleRequest(request);
        }
    }
}
public class Main {
    public static void main(String[] args) {

        RequestHandle hr = new HRRequestHandle();
        RequestHandle pm = new PMRequestHandle(hr);
        RequestHandle tl = new TLRequestHandle(pm);

        //team leader 处理离职请求
        Request request = new DimissionRequest();
        tl.handleRequest(request);

        System.out.println("===========");
        //team leader 处理加薪请求
        request = new AddMoneyRequest();
        tl.handleRequest(request);

        System.out.println("===========");
        //项目经理处理辞职请求
        request = new DimissionRequest();
        pm.handleRequest(request);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值