您的位置:首页 > 大数据 > 人工智能

行为模式:Chain Of Responsibility(职责链)

2013-02-07 19:48 405 查看
import java.util.*;

abstract class Logger
{
public static int ERR = 3;
public static int NOTICE = 5;
public static int DEBUG = 7;
protected int mask;

// The next element in the chain of responsibility
protected Logger next;
public Logger setNext( Logger l)
{
next = l;
return this;
}

public final void message( String msg, int priority )
{
if ( priority <= mask )
{
writeMessage( msg );
if ( next != null )
{
next.message( msg, priority );
}
}
}

protected abstract void writeMessage( String msg );

}

class StdoutLogger extends Logger
{

public StdoutLogger( int mask ) { this.mask = mask; }

protected void writeMessage( String msg )
{
System.out.println( "Writting to stdout: " + msg );
}
}

class EmailLogger extends Logger
{

public EmailLogger( int mask ) { this.mask = mask; }

protected void writeMessage( String msg )
{
System.out.println( "Sending via email: " + msg );
}
}

class StderrLogger extends Logger
{

public StderrLogger( int mask ) { this.mask = mask; }

protected void writeMessage( String msg )
{
System.out.println( "Sending to stderr: " + msg );
}
}

public class ChainOfResponsibilityExample
{
public static void main( String[] args )
{
// Build the chain of responsibility
Logger l = new StdoutLogger( Logger.DEBUG).setNext(
new EmailLogger( Logger.NOTICE ).setNext(
new StderrLogger( Logger.ERR ) ) );

// Handled by StdoutLogger
l.message( "Entering function y.", Logger.DEBUG );

// Handled by StdoutLogger and EmailLogger
l.message( "Step1 completed.", Logger.NOTICE );

// Handled by all three loggers
l.message( "An error has occurred.", Logger.ERR );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: