
责任链模式
责任链模式(Chain of Responsibility Pattern)为请求创建一个接收者对象的链,每个接收者都包含对另一个接收者的引用。如果不能处理该请求,那么它会把相同的请求传给下一个接收者。该模式在 Java Web中有很多应用,如 Apache Tomcat 对 Encoding 的处理,Struts2 的拦截器,JSP Servlet 的 Filter等等。
创建抽象类 AbstractLogger,带有详细的日志记录级别,在其基础上拓展出三个记录器,如果消息的级别属于自己,则记录器将其打印,否则把消息传给下一个记录器。
abstract class { public static int INFO = 1; public static int DEBUG = 2; public static int ERROR = 3;
protected int level;
protected AbstractLogger nextLogger;
public void setNextLogger(AbstractLogger nextLogger) { this.nextLogger = nextLogger; }
public void logMessage(int level, String message) { if (this.level <= level)="" {<="" span=""> write(message); } if (nextLogger != null) { nextLogger.logMessage(level, message); } }
abstract protected void write(String message); }
|
在 DebugLogger 中
class DebugLogger extends {
public DebugLogger() { super(); level = 2; }
protected void write(String message) { System.out.println("DebugLogger: " + message); } }
|
调用
static AbstractLogger getChainOfLogger() { AbstractLogger infoLogger = new InfoLogger(); AbstractLogger debugLogger = new DebugLogger(); AbstractLogger errorLogger = new ErrorLogger(); infoLogger.setNextLogger(debugLogger); debugLogger.setNextLogger(errorLogger); return infoLogger; }
public static void main(String[] args) { AbstractLogger logger = getChainOfLogger();
logger.logMessage(AbstractLogger.INFO, "an info msg"); logger.logMessage(AbstractLogger.DEBUG, "a debug msg"); logger.logMessage(AbstractLogger.ERROR, "an error msg"); }
|
控制台输出结果为
InfoLogger: an info msg InfoLogger: a debug msg DebugLogger: a debug msg InfoLogger: an error msg DebugLogger: an error msg ErrorLogger: an error msg
|
其他
命令模式
一种数据驱动的设计模式,请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并将命令传给它以执行命令。调用对象寻找合适对象的过程就像开关控制电器,它并不需要知道电器的具体情况,只需要根据命令,控制不同电线的连通状态。模式实现的代码较繁琐,具体的例子移步:Java设计模式–命令模式(以管理智能家电为例)
近期评论