/* Handler类 * 定义一个处理请示的接口 */ class Handler { protected: Handler *successor; public: virtual ~Handler() { delete successor; } void SetSuccessor(Handler *successor) { this->successor = successor; } virtual void HandleRequest( int request ) = 0; // 处理请求的抽象方法 }; /* ConcreteHandler类 * 具体处理者类,处理它所负责的请求,可访问它的后继者,如果可处理该请求, * 就处理之,否则就将该请求转发给它的后继者。 */ // ConcreteHandler1, 当请求数在0-10之间有权处理,否则转到下一位 class ConcreteHandler1 : public Handler { public: virtual void HandleRequest( int request ) { if( request >= 0 && request < 10 ) { printf("ConcreteHandler1 处理请求 %d\n", request); } else if( successor != null ) { successor->HandleRequest( request ); } } }; class ConcreteHandler2 : public Handler { public: virtual void HandleRequest( int request ) { if( request >= 10 && request < 20 ) { printf("ConcreteHandler2 处理请求 %d\n", request); } else if ( successor != null ) { successor->HandleRequest( request ); } } }; // 客户端代码 int main() { Handler *h1 = new ConcreteHandler1(); Handler *h2 = new ConcreteHandler2(); h1->SetSuccessor( h2 ); int req[5] = { 2, 5, 14, 18, 3 }; for( int i = 0; i < 5; ++ i ) { h1->HandleRequest( req[i] ); } }