//人类、女娲示例
//感觉没讲的,既然工厂要制造那么多东西,那直接用模板不就好了
class Human {
public:
virtual void GetColor(){}
virtual void Talk(){}
};
class BlackHuman : public Human {
public:
virtual void GetColor() {
cout << "black ";
}
virtual void Talk() {
cout << "nothing" << endl;
}
};
class YellowHuman : public Human {
public:
virtual void GetColor() {
cout << "yellow ";
}
virtual void Talk() {
cout << "single byte" << endl;
}
};
class WhiteHuman : public Human {
public:
virtual void GetColor() {
cout << "white ";
}
virtual void Talk() {
cout << "double byte" << endl;
}
};
class HumanFactory {
private:
typedef void (Human::*funPtr)();
public:
template<typename D>
D* CreateHuman() {
D* point = new D;
point->GetColor();
point->Talk();
return point;
}
};
class NvWa {
public:
static void main() {
HumanFactory* pfactory = new HumanFactory;
Human* phuman;
phuman = pfactory->CreateHuman<YellowHuman>();
phuman->GetColor();
phuman->Talk();
phuman = pfactory->CreateHuman<WhiteHuman>();
}
};
作者工厂模式可以归纳为:
1、先抽象产品类(设计基类,以及要被虚继承的函数)
2、具体产品类(派生子类,重写虚函数)
3、抽象工厂类(用模板处理子类,及相应函数)
4、场景类(你懂的,作者的所有场景类都使用static),注意下迪米特法则,就好。