using System; namespaceChainOfResponsibilityPatternDemo { publicinterfaceIHandler { IHandler SetNext(IHandler handler);
objectHandle(object request); }
// The default chaining behavior can be implemented inside a base handler // class. abstractclassAbstractHandler : IHandler { private IHandler _nextHandler;
public IHandler SetNext(IHandler handler) { this._nextHandler = handler;
// Returning a handler from here will let us link handlers in a // convenient way like this: // monkey.SetNext(squirrel).SetNext(dog); return handler; }
// Client: Who wants a Nut? // Squirrel: I'll eat the Nut. // Client: Who wants a Banana? // Monkey: I'll eat the Banana. // Client: Who wants a Cup of coffee? // Cup of coffee was left untouched.
// Subchain: Squirrel > Dog
// Client: Who wants a Nut? // Squirrel: I'll eat the Nut. // Client: Who wants a Banana? // Banana was left untouched. // Client: Who wants a Cup of coffee? // Cup of coffee was left untouched. } } }