#include <iostream>
#include <string>
using namespace std;
class Fruit{
public:
virtual void createFruit() = 0;
};
class appleFruit : public Fruit{
public:
void createFruit()
{
cout << "create apple" << endl;
}
};
class orangeFruit : public Fruit{
public:
void createFruit()
{
cout << "create orange" << endl;
}
};
class myFactory {
public:
Fruit* create(string name)
{
if (name == "apple")
{
return new appleFruit;
}
else if (name == "orange")
{
return new orangeFruit;
}
return NULL;
}
};
int main()
{
myFactory my;
Fruit* fruit = NULL;
fruit = my.create("apple");
fruit->createFruit();
delete fruit;
fruit = NULL;
fruit = my.create("orange");
fruit->createFruit();
delete fruit;
fruit = NULL;
return 0;
}
不符合开闭原则,通过专门一个类来创建其它类的实例,被创建的实例具有相同的父类。