#include
#include
class XieZi {
public:
virtual void ShaXie() = 0;
};
class ShaShaHai : public XieZi {
public:
void ShaXie() override {
std::cout << "sha tan hai!" << std::endl;
}
};
class RenZiTuo : public XieZi {
public:
void ShaXie() override {
std::cout << "ren zi tuo!" << std::endl;
}
};
class ZaPai : public XieZi {
public:
void ShaXie() override {
std::cout << "bu xiao de!" << std::endl;
}
};
class PaoBuHai : public XieZi {
public:
void ShaXie() override {
std::cout << "pao bu hai!" << std::endl;
}
};
class LanQiuHai : public XieZi {
public:
void ShaXie() override {
std::cout << "lan qiu hai!" << std::endl;
}
};
class ZuQiuHai : public XieZi {
public:
void ShaXie() override {
std::cout << "zu qiu hai!" << std::endl;
}
};
class XieFanZi {
public:
virtual XieZi* MaiXie(std::string sha_zi_xie) = 0;
};
class XieFanZiDeTuoXieZhuanGui : public XieFanZi{
public:
XieZi* MaiXie(std::string sha_zi_xie) {
if ("shatanxie" == sha_zi_xie) {
return new ShaShaHai();
} else if ("renzituo" == sha_zi_xie) {
return new RenZiTuo();
} else {
return new ZaPai();
}
}
};
class XieFanZiDeYunDongXieZhuanGui : public XieFanZi {
public:
XieZi* MaiXie(std::string sha_zi_xie) {
if ("paobuxie" == sha_zi_xie) {
return new PaoBuHai();
} else if ("lanqiuxie" == sha_zi_xie) {
return new LanQiuHai();
} else if ("zuqiuxie" == sha_zi_xie) {
return new ZuQiuHai();
} else {
return new ZaPai();
}
}
};
int main () {
{
std::cout << "-------------welcom to yilou zhuangui---------------" << std::endl;
XieFanZi * yilou = new XieFanZiDeTuoXieZhuanGui();
XieZi * xiezi1 = yilou->MaiXie("shatanxie");
xiezi1->ShaXie();
XieZi * xiezi2 = yilou->MaiXie("renzituo");
xiezi2->ShaXie();
XieZi * xiezi3 = yilou->MaiXie("dongdongxie");
xiezi3->ShaXie();
}
{
std::cout << "-------------welcom to erlou zhuangui---------------" << std::endl;
XieFanZi * erlou = new XieFanZiDeYunDongXieZhuanGui();
XieZi * xiezi1 = erlou->MaiXie("shatanxie");
xiezi1->ShaXie();
XieZi * xiezi2 = erlou->MaiXie("paobuxie");
xiezi2->ShaXie();
XieZi * xiezi3 = erlou->MaiXie("zuqiuxie");
xiezi3->ShaXie();
}
}