[设计模式]责任链模式

顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。


意图

避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。


实现

实现如下
log的分级功能

  • 创建抽象类
    public abstract class AbsLogger{
        protected int level;

        //责任链的下一级
        protected AbsLogger nextLogger;

        public void setNextLogger(AbsLogger logger){
            nextLogger = logger;
        }

        public void log(int level,String msg){
            if (this.level <= level){
                show(msg);
            }

            if (nextLogger != null){
                nextLogger.log(level, msg);
            }
        }
        protected abstract void show(String msg);
    }
  • 实现抽象类
    public class InfoLogger extends AbsLogger{
        public InfoLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Info : "+msg);
        }
    }

    public class DebugLogger extends AbsLogger{
        public DebugLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Debug : "+msg);
        }
    }

    public class ErrorLogger extends AbsLogger{
        public ErrorLogger(int level) {
            this.level = level;
        }

        @Override
        protected void show(String msg) {
            System.out.println("Error : "+msg);
        }
    }
  • 使用
    public void main(String... args){
        AbsLogger logger = getAllLogger();

        logger.log(3,"error msg");
        logger.log(2,"debug msg");
        logger.log(1,"info msg");
    }

    private AbsLogger getAllLogger() {
        AbsLogger errorLogger = new ErrorLogger(3);
        AbsLogger debugLogger = new DebugLogger(2);
        AbsLogger infoLogger = new InfoLogger(1);

        errorLogger.setNextLogger(debugLogger);
        debugLogger.setNextLogger(infoLogger);

        return errorLogger;
    }
  • 结果
I/System.out: Error : error msg
I/System.out: Debug : error msg
I/System.out: Info : error msg
I/System.out: Debug : debug msg
I/System.out: Info : debug msg
I/System.out: Info : info msg

资料

菜鸟教程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值