职责链模式:解耦请求的发送者和请求的接受者,使多个对象都由机会接收到这个请求。所有的对象形成一条链,在这条链中总有一个对象可以出来这个请求。
场景:
- 有多个对象可以处理一个请求,那个对象处理这个请求则运行时确定;
- 在不明确接受者的情况下,向多个对象中发送一个请求;
代码:
#include <stdio.h>
//任务类型
enum TYPE_REAPON {
REAPON_JUMP,//跳高
REAPON_VOTE,//投掷
REAPON_RUN,//跑步
};
//处理对象的基类
class Sir {
public:
void setSir(Sir* s) {
_sir = s;
}
virtual void order(TYPE_REAPON t) {
}
protected:
Sir* _sir;
};
class TiaoGao :public Sir {
public:
void order(TYPE_REAPON t) {
if(t == REAPON_JUMP) {
printf("张三负责跳高\n");
} else {
_sir->order(t);
}
}
};
class TouZhi :public Sir {
public:
void order(TYPE_REAPON t) {
if(t == REAPON_VOTE) {
printf("李四负责投掷\n");
} else {
_sir->order(t);
}
}
};
class PaoBu :public Sir {
public:
void order(TYPE_REAPON t) {
if(t == REAPON_RUN) {
printf("王五负责跑步\n");
} else {
_sir->order(t);
}
}
};
int main() {
TiaoGao* b = new TiaoGao;
TouZhi* t = new TouZhi;
PaoBu* j = new PaoBu;
b->setSir(t);
t->setSir(j);
j->setSir(b);
b->order(REAPON_JUMP);
b->order(REAPON_VOTE);
b->order(REAPON_RUN);
return 0;
}
运行结果: