外观模式的简单理解

最近在OKHttp源码的时候看到了Intercept接口,了解到了其中运用的设计模式—-责任链模式。回想起了曾经学习struts时候的拦截器,感觉很想,决定了解下什么是责任链模式。
先写一个小的demo:模拟日志输出。
日志基类:


public abstract class BaseLogger {
    private int level;
    private BaseLogger nextLogger;

    abstract void log(String message);

    public void showLog(String message) {
        log(message);
        if (null != nextLogger && level < nextLogger.level) {
            nextLogger.showLog(message);
        }

    }

    public BaseLogger(int level, BaseLogger nextLogger) {
        super();
        this.level = level;
        this.nextLogger = nextLogger;
    }

}

verbose日志:


public class VerboseLogger extends BaseLogger {

    public VerboseLogger(int level, BaseLogger nextLogger) {
        super(level, nextLogger);
    }

    void log(String message) {
        System.out.println(message+"VerboseLogger");
    }

}

debug日志:


public class DebugLogger extends BaseLogger {

    public DebugLogger(int level, BaseLogger nextLogger) {
        super(level, nextLogger);
    }

    public void showLog(String message, BaseLogger nextLogger) {
        //if () {}
        log(message);
    }

    void log(String message) {
        System.out.println(message+"DebugLogger");

    }

}

error日志:


public class ErrorLogger extends BaseLogger {

    public ErrorLogger(int level, BaseLogger nextLogger) {
        super(level, nextLogger);
    }

    void log(String message) {
        System.out.println(message+"ErrorLogger");

    }

}

在安卓里,三种日志应该是,如果输出verbose日志,那么debug,error都会输出,如果是debug日志,那么error会输出,如果是error则只有error输出。对应的就是代码中的日志的级别,级别大于当前的日志都会输出。测试代码:



public class ChainTest {

    public static void main(String[] args) {
        BaseLogger absLog1 = new VerboseLogger(1, new DebugLogger(2, new ErrorLogger(3, null)));
        absLog1.showLog("wahaha");
        System.out.println("---------------------------------------");
        BaseLogger absLog2 = new DebugLogger(2, new ErrorLogger(3, new VerboseLogger(2, null)));
        absLog2.showLog("wahaha");
        System.out.println("---------------------------------------");
        BaseLogger absLog3 = new ErrorLogger(3, new DebugLogger(2, new VerboseLogger(1, null)));
        absLog3.showLog("wahaha");

    }

}

结果:
wahahaVerboseLogger
wahahaDebugLogger

wahahaErrorLogger

wahahaDebugLogger

wahahaErrorLogger

wahahaErrorLogger

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值