#include <iostream>
#include <vector>
class MyBase
{//基类->抽象类
public:
virtual void Fun() = 0;
virtual ~MyBase() {} //要做为基类的类,最好提供一个虚析构函数
protected:
MyBase() {}
};
class MyA : public MyBase
{//派生类A
public:
virtual void Fun()
{
std::cout<<"In A Class\n";
}
~MyA()
{
std::cout<<"MyA was gone!\n";
}
};
class MyB : public MyBase
{//派生类B
public:
virtual void Fun()
{
std::cout<<"In B Class\n";
}
~MyB()
{
std::cout<<"MyB was gone!\n";
}
};
class MyC : public MyBase
{//派生类C
public:
virtual void Fun()
{
std::cout<<"In C Class\n";
}
~MyC()
{
std::cout<<"MyC was gone!\n";
}
};
class Factory
{//工厂方法类
private:
//用来管理该工厂构建出的对象的生存期
std::vector<MyBase*> myPtList;
public:
template<class TBase>
TBase * GetObjPt()
{//工厂方法
TBase * pb =new TBase;
myPtList.push_back((MyBase*)pb);
return pb;
}
~Factory()
{//释放该工厂所构造的对象
for (int i = 0, n = myPtList.size(); i < n; i++)
{
MyBase * pb = myPtList[i];
delete pb;
}
}
};
int main()
{
{
Factory fac;
MyA * ma = fac.GetObjPt<MyA>();
MyB * mb = fac.GetObjPt<MyB>();
MyA * maa = fac.GetObjPt<MyA>();
MyC * mc = fac.GetObjPt<MyC>();
ma->Fun();
mb->Fun();
mc->Fun();
}
std::cin.get();
return 0;
}