blog/archive/design pattern/responsibility.cpp
2024-03-19 02:45:09 +08:00

89 lines
1.7 KiB
C++

#include <iostream>
using namespace std;
class Info
{
public:
string name;
int day;
Info(string name, int day)
{
this->name = name;
this->day = day;
}
};
class Approval
{
protected:
string name;
Approval *next;
public:
Approval(string name)
{
this->name = name;
}
void setSuccessor(Approval *next)
{
this->next = next;
}
virtual void process(Info *info) = 0;
};
class Director : public Approval
{
public:
Director(string name) : Approval(name) {}
void process(Info *info)
{
if (info->day <= 3)
{
cout << this->name << "同意" << info->name << "请假" << info->day << "" << endl;
}
else
{
this->next->process(info);
}
}
};
class Manager : public Approval
{
public:
Manager(string name) : Approval(name) {}
void process(Info *info)
{
if (info->day <= 10)
{
cout << this->name << "同意" << info->name << "请假" << info->day << "" << endl;
}
else
{
this->next->process(info);
}
}
};
class Boss : public Approval
{
public:
Boss(string name) : Approval(name) {}
void process(Info *info)
{
cout << this->name << "同意" << info->name << "请假" << info->day << "" << endl;
}
};
int main()
{
Director *d = new Director("主管A");
Manager *m = new Manager("经理B");
Boss *b = new Boss("老板C");
d->setSuccessor(m);
m->setSuccessor(b);
d->process(new Info("员工A", 2));
d->process(new Info("员工B", 4));
d->process(new Info("员工C", 15));
return 0;
}