Chain Of Responsibility

来源:互联网 发布:手机图文排版软件 编辑:程序博客网 时间:2024/06/03 21:31

责任链设计模式,使链上每个节点都有机会处理请求。将处理对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

抽象处理者角色: 定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。

具体处理者角色: 具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。


责任链打印日志代码示例:

抽象处理类

public abstract class Logger {    public static final int DUBEG = 1;    public static final int INFO = 2;    public static final int ERROR = 3;    protected int level = 0;    protected Logger nextLogger;    public Logger getNextLogger() {        return nextLogger;    }    public void logMessage(int level, String message) {        //指定的级别够我就处理        if (level <= this.level) {            write(message);        }        //传递给下家        if (nextLogger != null) {            nextLogger.logMessage(level, message);        }    }    public void setNextLogger(Logger nextLogger) {        this.nextLogger = nextLogger;    }    //由具体执行者实现    protected abstract void write(String message);}

三个级别的具体处理类

public class Debug extends Logger {    public Debug(int level) {        this.level = level;    }    @Override    public void write(String message) {        System.out.println("[debug]: " + message);    }}
public class Info extends Logger {    public Info(int level) {        this.level = level;    }    @Override    public void write(String message) {        System.out.println("[info]: " + message);    }}
public class Error extends Logger {    public Error(int level) {        this.level = level;    }    @Override    public void write(String message) {        System.out.println("[error]: " + message);    }}

责任链工厂,包装处理链

public final class LoggerFactory {    public static Logger getLogger() {        // 初始化责任链节点        Logger debug = new Debug(Logger.DUBEG);        Logger info = new Info(Logger.INFO);        Logger error = new Error(Logger.ERROR);        // 设置责任链关系        info.setNextLogger(error);        debug.setNextLogger(info);        return debug;    }}

测试

public class LoggerChainTest {    private static final Logger logger = LoggerFactory.getLogger();    public static void main(String args[]) {        //可以通过改变这里的日志级别,控制输出的日志        logger.logMessage(Logger.ERROR, "Hello World");    }}
0 0
原创粉丝点击