#include
class ShenHeRenYuan {
public:
virtual bool ShenHe(int qian) = 0;
protected:
ShenHeRenYuan* next;
};
class ZuZhang : public ShenHeRenYuan {
public:
ZuZhang(ShenHeRenYuan* lingdao) {
this->next = lingdao;
}
bool ShenHe(int qian) override {
if(qian < 10000) {
std::cout << "zuzhang : tong guo " << qian << std::endl;
return true;
}
return next->ShenHe(qian);
}
};
class XieFanZi : public ShenHeRenYuan {
public:
XieFanZi() {
this->next = nullptr;
}
bool ShenHe(int qian) override {
std::cout << "xiefanzi : bo kuan " << qian << " kuai" << std::endl;
return true;
}
};
int main() {
ShenHeRenYuan* xiao_ming_liu_cheng = new ZuZhang(new XieFanZi());
xiao_ming_liu_cheng->ShenHe(100000);
std::cout << "----------------" << std::endl;
xiao_ming_liu_cheng->ShenHe(1000);
}
- 可以看到,对于10000以内的申请,组长可以直接处理。
- 组长无法处理的时候向上审批。
- 这种链式的责任明确。不过容易腐败。