行为设计模式---责任链模式(Chain of Responsibility)
2014-09-23 09:30
555 查看
责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止
责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。
一个链可以是一条线,一个树,也可以是一个环。
.e.g
CountryHospital --> LittleSick
CityHospital --> MiddleSick
ProvinceHospital --> BadSick
Chain.h
#ifndef _CHAIN_H_
#define _CHAIN_H_
#include <iostream>
enum SickGrade
{
LittleSick, MiddleSick, BadSick
};
class Hospital
{
public:
Hospital(Hospital *h = NULL);
virtual ~Hospital() {}
void setHospital(Hospital *h);
Hospital * getHospital();
virtual void curPatient(SickGrade s) = 0;
protected:
Hospital *high_;
};
class CountryHospital : public Hospital
{
public:
CountryHospital(Hospital *h);
virtual ~CountryHospital() {}
virtual void curPatient(SickGrade s);
};
class CityHospital : public Hospital
{
public:
CityHospital(Hospital *h);
virtual ~CityHospital() {}
virtual void curPatient(SickGrade s);
};
class ProvinceHospital : public Hospital
{
public:
virtual ~ProvinceHospital() {}
virtual void curPatient(SickGrade s);
};
#endif
Chain.cpp
#include "Chain.h"
using std::cout;
using std::endl;
Hospital::Hospital(Hospital *h)
{
high_ = h;
}
void Hospital::setHospital(Hospital *h)
{
high_ = h;
}
Hospital * Hospital::getHospital()
{
return high_;
}
CountryHospital::CountryHospital(Hospital *h) : Hospital(h)
{
}
void CountryHospital::curPatient(SickGrade s)
{
if (LittleSick != s)
{
cout << "Sorry, we can only cure little sick" << endl;
this->high_->curPatient(s);
}
else
cout << "little sick is ok" << endl;
}
CityHospital::CityHospital(Hospital *h) : Hospital(h)
{
}
void CityHospital::curPatient(SickGrade s)
{
if (MiddleSick != s)
{
cout << "Sorry, we can only cure middle sick" << endl;
this->high_->curPatient(s);
}
else
cout << "middle sick is ok" << endl;
}
void ProvinceHospital::curPatient(SickGrade s)
{
if (BadSick != s)
{
cout << "Sorry, we can only cure bad sick" << endl;
this->high_->curPatient(s);
}
else
cout << "bad sick is ok" << endl;
}
main.cpp
#include "Chain.h"
int main()
{
Hospital *province = new ProvinceHospital();
Hospital *city = new CityHospital(province);
Hospital *country = new CountryHospital(city);
country->curPatient(BadSick);
if (NULL != country)
{
delete country;
country = NULL;
}
if (NULL != city)
{
delete city;
city = NULL;
}
if (NULL != province)
{
delete province;
province = NULL;
}
return 0;
}
Makefile
cc=g++
exe=main
obj= main.o Chain.o
$(exe): $(obj)
$(cc) -g -o $(exe) $(obj)
main.o: main.cpp Chain.h
$(cc) -g -c main.cpp
Chain.o: Chain.cpp Chain.h
$(cc) -g -c Chain.cpp
clean:
rm -rf *o $(exe)
将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止
责任链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。
一个链可以是一条线,一个树,也可以是一个环。
.e.g
CountryHospital --> LittleSick
CityHospital --> MiddleSick
ProvinceHospital --> BadSick
Chain.h
#ifndef _CHAIN_H_
#define _CHAIN_H_
#include <iostream>
enum SickGrade
{
LittleSick, MiddleSick, BadSick
};
class Hospital
{
public:
Hospital(Hospital *h = NULL);
virtual ~Hospital() {}
void setHospital(Hospital *h);
Hospital * getHospital();
virtual void curPatient(SickGrade s) = 0;
protected:
Hospital *high_;
};
class CountryHospital : public Hospital
{
public:
CountryHospital(Hospital *h);
virtual ~CountryHospital() {}
virtual void curPatient(SickGrade s);
};
class CityHospital : public Hospital
{
public:
CityHospital(Hospital *h);
virtual ~CityHospital() {}
virtual void curPatient(SickGrade s);
};
class ProvinceHospital : public Hospital
{
public:
virtual ~ProvinceHospital() {}
virtual void curPatient(SickGrade s);
};
#endif
Chain.cpp
#include "Chain.h"
using std::cout;
using std::endl;
Hospital::Hospital(Hospital *h)
{
high_ = h;
}
void Hospital::setHospital(Hospital *h)
{
high_ = h;
}
Hospital * Hospital::getHospital()
{
return high_;
}
CountryHospital::CountryHospital(Hospital *h) : Hospital(h)
{
}
void CountryHospital::curPatient(SickGrade s)
{
if (LittleSick != s)
{
cout << "Sorry, we can only cure little sick" << endl;
this->high_->curPatient(s);
}
else
cout << "little sick is ok" << endl;
}
CityHospital::CityHospital(Hospital *h) : Hospital(h)
{
}
void CityHospital::curPatient(SickGrade s)
{
if (MiddleSick != s)
{
cout << "Sorry, we can only cure middle sick" << endl;
this->high_->curPatient(s);
}
else
cout << "middle sick is ok" << endl;
}
void ProvinceHospital::curPatient(SickGrade s)
{
if (BadSick != s)
{
cout << "Sorry, we can only cure bad sick" << endl;
this->high_->curPatient(s);
}
else
cout << "bad sick is ok" << endl;
}
main.cpp
#include "Chain.h"
int main()
{
Hospital *province = new ProvinceHospital();
Hospital *city = new CityHospital(province);
Hospital *country = new CountryHospital(city);
country->curPatient(BadSick);
if (NULL != country)
{
delete country;
country = NULL;
}
if (NULL != city)
{
delete city;
city = NULL;
}
if (NULL != province)
{
delete province;
province = NULL;
}
return 0;
}
Makefile
cc=g++
exe=main
obj= main.o Chain.o
$(exe): $(obj)
$(cc) -g -o $(exe) $(obj)
main.o: main.cpp Chain.h
$(cc) -g -c main.cpp
Chain.o: Chain.cpp Chain.h
$(cc) -g -c Chain.cpp
clean:
rm -rf *o $(exe)
相关文章推荐
- 23种设计模式之责任链模式(Chain of Responsibility)
- 设计模式——责任链模式(Chain Of Responsibility)
- Java设计模式之责任链模式(Chain of Responsibility模式)介绍
- 设计模式之责任链模式(Chain of Responsibility)
- Java开发中的23种设计模式之十七:责任链模式(Chain of Responsibility)
- [设计模式-行为型]责任链模式(Chain of Responsibility)
- Java设计模式-责任链模式(Chain of Responsibility)
- 23种设计模式之二十一(行为模式)Chain of Responsibility模式
- 【设计模式学习笔记十四】【行为模式】【职责链模式(Chain Of Responsibility)】
- 设计模式:行为模式:职责链(chain of responsibility)
- 设计模式(13)-行为型-责任链模式(Chain of Responsibility)
- java设计模式17——责任链模式(Chain of Responsibility)
- 设计模式系列之二_责任链模式(Chain of Responsibility)
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为
- 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为
- JAVA设计模式—责任链模式(Chain Of Responsibility)
- 十六.行为型设计模式——Chain of Responsibility(责任链模式)
- GOF23设计模式之责任链模式(chain of responsibility)之实现
- GOF 23 设计模式之 责任链模式(Chain Of Responsibility)
- (三)二十三中设计模式之我见-------------责任链模式(Chain of Responsibility)