namespace ChainofResponsibility { /// <summary> /// 抽象责任链构件 /// </summary> abstract class AbstractLogger { public const int INFO = 1; public const int DEBUG = 2; public const int ERROR = 3;
protected int level; private AbstractLogger nextNode;
public void SetNextNode(AbstractLogger logger) { nextNode = logger; }
public void Handle(int level, string msg) { if (level >= this.level) { Operation(msg); } if (nextNode != null) { nextNode.Handle(level, msg); } }
namespace ChainofResponsibility { class Program { static void Main(string[] args) { AbstractLogger abstractLogger = GetLogger();
abstractLogger.Handle(AbstractLogger.INFO, "This is an Info Message"); abstractLogger.Handle(AbstractLogger.DEBUG, "This is an Debug Message"); abstractLogger.Handle(AbstractLogger.ERROR, "This is an Error Message");
Console.ReadLine(); } /// <summary> /// 这里容易出现 循环调用,不直观,有碍于查错误. /// </summary> /// <returns></returns> static AbstractLogger GetLogger() { AbstractLogger remoteLogger = new RemoteLogger(AbstractLogger.DEBUG); AbstractLogger fileLogger = new FileLogger(AbstractLogger.ERROR); AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);