zoukankan      html  css  js  c++  java
  • 设计模式复习-职责链模式

    #pragma once
    #include "stdafx.h"
    #include<set>
    #include<string>
    #include<iostream>
    using namespace std;
    
    /*
    	设计模式-职责链模式(Chain of Responsibility)
    	使多个对象都有机会处理请求,从而避免请求的开发者和接受者之间的耦合关系。
    将这个对象连成一条链,并沿着这条链传递请求,直到有一个对象处理他为止。
    */
    
    class CHandler {//定义一个处理请求的接口
    protected:
    	CHandler *mpSuccessor;
    public:
    	CHandler() {mpSuccessor = NULL;}
    	void SetSuccessor(CHandler *pSuccessor) {
    		mpSuccessor = pSuccessor;
    	}
    	virtual void HandlerRequest(const int &nRequest) = 0;
    };
    
    class CConcreteHandler1 : public CHandler {//处理0-10之间的事物
    public:
    	void HandlerRequest(const int &nRequest) {
    		if (nRequest >= 0 && nRequest < 10) {
    			cout << "CConcreteHandler1:" << nRequest << endl;
    		}
    		else if (mpSuccessor != NULL) {
    			mpSuccessor->HandlerRequest(nRequest);
    		}
    	}
    };
    
    class CConcreteHandler2 : public CHandler {//处理10以上的事物
    public:
    	void HandlerRequest(const int &nRequest) {
    		if (nRequest >= 10) {
    			cout << "CConcreteHandler2:" << nRequest << endl;
    		}
    		else if (mpSuccessor != NULL) {
    			mpSuccessor->HandlerRequest(nRequest);
    		}
    	}
    };
    
    
    int main() {
    
    	CHandler *pH1 = new CConcreteHandler1();
    	CHandler *pH2 = new CConcreteHandler2();
    	pH1->SetSuccessor(pH2);
    	for (int index = 0; index <= 15; index++) {
    		pH1->HandlerRequest(index);
    	}
    	getchar();
    	return 0;
    }

  • 相关阅读:
    SQL CREATE TABLE 语句
    SQL CREATE DATABASE 语句
    SQL INSERT INTO SELECT 语句
    SQL SELECT INTO 语句
    Why is chkconfig no longer available in Ubuntu?
    drag-html
    js利用offsetWidth和clientWidth来计算滚动条的宽度
    procomm plus
    很多shell命令后面的单横杠和双横杠,原来这个意思
    angular md-toast 颜色
  • 原文地址:https://www.cnblogs.com/csnd/p/12061907.html
Copyright © 2011-2022 走看看