创建型-简单工厂模式
//简单工厂模式
//1.增加新的功能是通过修改源代码实现,不符合开闭原则
//2.这个类职责过重,这个类发生问题,会影响很多使用这个工厂的模块
#include <iostream>
using namespace std;
//抽象水果类
class Fruit{
public:
virtual void ShowName() = 0;
};
//苹果
class Apple : public::Fruit{
public:
virtual void ShowName(){
cout << "我是苹果!" << endl;
}
};
//香蕉
class Banana : public::Fruit{
public:
virtual void ShowName(){
cout << "我是香蕉!" << endl;
}
};
//鸭梨
class Pear : public::Fruit{
public:
virtual void ShowName(){
cout << "我是鸭梨!" << endl;
}
};
//水果工厂
class FruitFactory{
public:
static Fruit* CreateFruit(string flag){
if(flag == "apple"){
return new Apple;
}
else if(flag == "banana"){
return new Banana;
}
else if(flag == "pear"){
return new Pear;
}
else{
return NULL;
}
}
};
void test(){
FruitFactory* factory = new FruitFactory;
Fruit* fruit = factory->CreateFruit("apple");
fruit->ShowName();
delete fruit;
fruit = factory->CreateFruit("banana");
fruit->ShowName();
delete fruit;
fruit = factory->CreateFruit("pear");
fruit->ShowName();
delete fruit;
delete factory;
}
int main()
{
test();
system("pause");
return 0;
}