形象生动的讲,就是个苦力模式:一个老板,三个领导,还有一个苦工。如下:
#include<iostream>
#include<vector>
using std::cout;
using std::endl;
class Leader;
class Boss
{
std::vector<Leader*> team;
public:
void addHelper(Leader* leader);
void notify();
};
class Worker
{
public:
void serveTea()
{
cout << "我去端茶" << endl;
}
void pourWater()
{
cout << "我去倒水" << endl;
}
void writeCode()
{
cout << "我去写代码" << endl;
}
};
class Leader
{
public:
virtual void execute() = 0;
};
class LeaderA :public Leader
{
Worker* mWorker;
public:
LeaderA(Worker* worker)
{
mWorker = worker;
}
virtual void execute();
};
class LeaderB :public Leader
{
Worker* mWorker;
public:
LeaderB(Worker* worker)
{
mWorker = worker;
}
virtual void execute();
};
class LeaderC :public Leader
{
Worker* mWorker;
public:
LeaderC(Worker* worker)
{
mWorker = worker;
}
virtual void execute();
};
int main()
{
Boss boss; //一个老板
Worker* worker = new Worker();//一个苦力
LeaderA* leaderA = new LeaderA(worker); //一个领导
LeaderB* leaderB = new LeaderB(worker); //二个领导
LeaderC* leaderC = new LeaderC(worker); //三个领导
boss.addHelper(leaderA); //老板说,等下需要有人上茶,先叫上领导A
boss.addHelper(leaderB); //老板说,等下需要有人倒水,先叫上领导B
boss.addHelper(leaderC); //老板说,等下需要有人写代码,先叫上领导C
boss.notify();//都去干活;
delete worker;
delete leaderA;
delete leaderB;
delete leaderC;
return 0;
}
void LeaderA::execute()
{
mWorker->serveTea();
}
void LeaderB::execute()
{
mWorker->pourWater();
}
void LeaderC::execute()
{
mWorker->writeCode();
}
void Boss::addHelper(Leader * leader)
{
team.push_back(leader);
}
void Boss::notify()
{
for (auto const& leader : team)
{
leader->execute();
}
}