首先,需要一个虚基类,在工厂里面new 一个需要的子类 ,然后返回给父类的指针。
#include <iostream>
using namespace std;
class AbstractFruit
{
public:
virtual void showName()=0;
AbstractFruit()
{
cout<<"AbstractFruit构造"<<endl;
}
~AbstractFruit()
{
cout<<"AbstractFruit析构"<<endl;
}
};
class Apple :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am apple"<<endl;
}
Apple()
{
cout<<"Apple构造"<<endl;
}
~Apple()
{
cout<<"Apple析构"<<endl;
}
protected:
private:
};
class Banana :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am banana"<<endl;
}
Banana()
{
cout<<"Banana构造"<<endl;
}
~Banana()
{
cout<<"Banana析构"<<endl;
}
protected:
private:
};
class Pear :public AbstractFruit
{
public:
virtual void showName()
{
cout<<"i am Pear"<<endl;
}
Pear()
{
cout<<"Pear构造"<<endl;
}
~Pear()
{
cout<<"Pear析构"<<endl;
}
protected:
private:
};
class FruitFactory
{
public:
static AbstractFruit* createFruit(string t_flag)
{
if(t_flag.compare("apple") == 0)//
{
return new Apple;
}
else if (t_flag.compare("banana") == 0)
{
return new Banana;
}
else if (t_flag.compare("pear") == 0)
{
return new Pear;
}
else
{
return nullptr;
}
}
};
int main()
{
{
FruitFactory* t_factory = new FruitFactory;
AbstractFruit* t_fruit = t_factory->createFruit("apple");
t_fruit->showName();
delete t_fruit;
t_fruit = nullptr;
}
cout<<"----------------------------------------------------"<<endl;
{
FruitFactory* t_factory = new FruitFactory;
AbstractFruit* t_fruit = t_factory->createFruit("banana");
t_fruit->showName();
delete t_fruit;
t_fruit = nullptr;
}
system("pause");
return 0;
}