// 抽象出变化的实现,可以用抽象工厂来选择具体的实现
class Carrier
{
public:
virtualvoidvConHardWork() = 0;
virtualvoid vConLeisureWork() = 0;
};
class Teacher : public Carrier
{
public:
virtualvoidvConHardWork()
{
cout<<"teachers work hard for make more money!"<<endl;
}
virtualvoid vConLeisureWork()
{
cout<<"teachers work in a leisure-work company!"<<endl;
}
};
class Worker : public Carrier
{
public:
virtualvoidvConHardWork()
{
cout<<"workers work from 9:00am to 5:00pm everyday!"<<endl;
}
virtualvoid vConLeisureWork()
{
cout<<"workers work 8 hours in a leisure-company!"<<endl;
}
};
class Human
{
public:
Human(Carrier* ca,conststring str):carir(ca),name(str){};
virtualvoid vHardWork(){}; // 不实现virtualvoid vLeisureWork(){};
protected:
string name;
Carrier* carir;
};
class MaleCarrier : public Human
{
public:
MaleCarrier(Carrier* ca,conststring name):Human(ca,name){};
virtualvoid vHardWork()
{
cout<<"man need work hard for the family..."<<endl;
carir->vConHardWork();
}
};
class FemaleCarrier : public Human
{
public:
FemaleCarrier(Carrier* ca,conststring name):Human(ca,name){};
virtualvoid vLeisureWork()
{
cout<<"female need pay more attention on care about family..."<<endl;
carir->vConLeisureWork();
}
};