c++设计模式之责任链模式

最近在看《大话设计模式》这本书,看后感受颇深,现想通过博客的形式将文中所讲到的设计模式用c++语言实现一遍,希望对学习c++和设计模式的朋友有所帮助,同时希望博友们能对代码中有误或者不当的的地方进行指正。

责任链模式--(Chain of Responsibility)

代码如下:

#include <iostream>
#include <stdio.h>
using namespace std;


//请求类 ----(请求类型,请求内容,请求数量)
class Request
{
public:
int Type;
char* Content;
int Num;
public:
void setType(int type){Type=type;}
void setContent(char* content){Content=content;}
void setNum(int num){Num=num;}
};


//抽象管理者类
class Manager
{
protected:
char* name;
Manager* superior;


public:
Manager(char* name1)
{ superior=NULL;
name=name1; 
}


void setSuperior(Manager* superior1)
{
this->superior=superior1;
}
virtual void handleRequest(Request* request)
{
}


};


//部门经理
class CommonManager:Manager
{
public:
CommonManager(char* name1):Manager(name1){};  //constructor
void handleRequest(Request* request)
{
if(request->Type == 1 && request->Num<3)
{
cout<<name<<":"<<request->Content<<" be passed"<<endl;
}
else
{
if(superior!=NULL)
{
superior->handleRequest(request);
}
}
}


};


//总监
class MajorDomo:Manager
{
public:
MajorDomo(char* name1):Manager(name1){};
void handleRequest(Request* request)
{
if(request->Type == 1 && request->Num<10)
{
cout<<name<<":"<<request->Content<<" be passed"<<endl;
}
else
{
if(superior!=NULL)
{
superior->handleRequest(request);
}
}
}


};


class GeneralManager:Manager
{
public:
GeneralManager(char* name1):Manager(name1){};
void handleRequest(Request* request)
{
if(request->Type == 1 && request->Num<15)
{
cout<<name<<":"<<request->Content<<" be passed"<<endl;
}
else
{
if(superior!=NULL)
{
superior->handleRequest(request);
}
}
}


};


//客户端调用
int _tmain(int argc, _TCHAR* argv[])
{
Manager* comMan=(Manager*)new CommonManager("xiaozhou");
Manager* majDomo=(Manager*)new MajorDomo("zhongzhou");
Manager* genMan=(Manager*)new GeneralManager("dazhou");
comMan->setSuperior(majDomo);
majDomo->setSuperior(genMan);


Request* request1=new Request();
request1->setType(1);
request1->setContent("mm Qingjia");
request1->setNum(2);
comMan->handleRequest(request1);

Request* request2=new Request();
request2->setType(1);
request2->setContent("gg Qingjia");
request2->setNum(2);
comMan->handleRequest(request2);

delete comMan;

delete majDomo;

delete genMan;

delete request2;

delete request2;



return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值