/** * chain.h * Implemented by Blueprint Technologies, Inc. */ #ifndef _chain_h #define _chain_h /** * Defines an interface for handling requests. Implements * the successor link. */ class Handler { private: Handler* successor; public: Handler(): successor(0) { }; virtual void handleRequest() = 0; Handler* getSuccessor() { return successor; }; void setSuccessor( Handler* successor ) { this -> successor = successor; }; }; /** * Handles requests it is responsible for. Can access its * successor. If the ConcreteHandler can handle the request, * it does so; otherwise it forwards the request to its * successor. */ class ConcreteHandler1: public Handler { public: virtual void handleRequest() { // Can we handle this? if( getSuccessor() ) { // No, pass it down. getSuccessor() -> handleRequest(); } }; }; /** * Handles requests it is responsible for. Can access its * successor. If the ConcreteHandler can handle the request, * it does so; otherwise it forwards the request to its * successor. */ class ConcreteHandler2: public Handler { public: virtual void handleRequest() { // Can we handle this? if( getSuccessor() ) { // No, pass it down. getSuccessor() -> handleRequest(); } }; }; #endif