Java设计模式之责任链模式

责任链模式的官方定义:很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。
责任链模式的角色:
1.Handler:抽象处理者,定义出一个处理请求的接口。
2.ConcreteHandler:具体处理者,具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。
3.Request:抽象请求者,定义请求接口。
4.ConcreteRequest:具体请求者,继承抽象请求,实现具体的请求。

Handler(抽象处理者)

package com.exanple.command;
/**
 * 抽象处理者
 * @author zeng
 *
 */
public abstract class Handler {
    Handler nextHandler;
    public void handleRequest(Request request){
        if (request.getHandlerLevel() == getHandlerLevel()) {
            handle(request);

        }else {
            if (nextHandler != null) {
                nextHandler.handleRequest(request);

            }
        }

    } 

    public abstract int getHandlerLevel(); 
    public abstract void handle(Request request); 


}

具体处理者一

package com.exanple.command;

public class ConcoreteHandler01 extends Handler{

    @Override
    public int getHandlerLevel() {
        return 1;
    }

    @Override
    public void handle(Request request) {
        System.out.println("处理请求: " + request.getHandlerLevel());

    }


}

具体处理者二

package com.exanple.command;

public class ConcoreteHandler02 extends Handler{

    @Override
    public int getHandlerLevel() {
        return 2;
    }

    @Override
    public void handle(Request request) {
        System.out.println("处理请求: " + request.getHandlerLevel());

    }


}

具体处理者三

package com.exanple.command;

public class ConcoreteHandler03 extends Handler{

    @Override
    public int getHandlerLevel() {
        return 3;
    }

    @Override
    public void handle(Request request) {
        System.out.println("处理请求: " + request.getHandlerLevel());

    }


}

抽象请求者

package com.exanple.command;

public abstract class Request {
    public abstract int getHandlerLevel();

}

具体请求者

package com.exanple.command;

public class ConcoreteRequest extends Request{

    @Override
    public int getHandlerLevel() {
        return 2;
    }

}

客户类

package com.exanple.command;

public class Client {

    public static void main(String[] args) {
        Handler handler01 = new ConcoreteHandler01();
        Handler handler02 = new ConcoreteHandler02();
        Handler handler03 = new ConcoreteHandler03();

        handler01.nextHandler = handler02;
        handler02.nextHandler = handler03;

        Request request = new ConcoreteRequest();

        //第一个处理者开始分发请求
        handler01.handleRequest(request);


    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值