您的位置:首页 > 编程语言 > C语言/C++

设计模式:简单工厂模式(C++)【看不懂算我输】

2018-03-02 10:50 211 查看

简单工厂模式介绍

简单工厂模式并不是Gof四人帮搞的23中设计模式中的一种,只不过大部分的设计模式书籍都会介绍它。所有我们还是来看看它,或许你觉得很简单。但是我们可以瞧瞧它有什么优点和缺点。如何进行改进?进行一些发散性的思考

简单工厂模式由来

工厂是什么?大多人都应该知道吧,就是生产批量的产品。我们知道对象,编程语言中的对象,都是我们new 出来的,我们每调用一次构造器才会生成一个对象。就相当于产品,我们亲自去生成产品然后去使用,自产自销嘛。这样是不是很累呀,由此就诞生了工厂,我们可以把我们需要的产品类型给我们的工厂,让工厂去给我们生成这些产品。我们就成客户啦,直接从工厂拿货!这样是不是方便很多呀。ok,我们的简单工厂模式呢,就是客户提供类型,工厂进行生成,然后将生成好的产品 返回给用户

简单工厂模式代码模型图



简单工厂模式代码

下面我们来看简单工厂模式的C++代码,SampleFactory.cpp是不是很简单,因为名字中就简单啊。#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
//汽车基类 抽象类不可以实例化
class Car
{
public:
Car(string name)
{
this->name = name;
}
virtual void run() = 0;//纯虚函数
void setName(string name)
{
this->name = name;
}
string getName()
{
return this->name;
}
private:
string name;
};
//宝马汽车继承汽车类
class BMW:public Car
{
public:
BMW(string name):Car(name)
{

}
void run()
{
cout << this->getName() << "已经启动。" <<"宝马汽车欢迎您。" <<endl;
}
};
//奔驰汽车继承汽车类
class Benz :public Car
{
public:
Benz(string name):Car(name)
{

}
void run()
{
cout << this->getName() << "已经启动。" << "奔驰汽车欢迎您。" << endl;
}
};
//哈弗汽车继承汽车类
class Haval:public Car
{
public:
Haval(string name):Car(name)
{

}
void run()
{
cout << this->getName() << "已经启动。" << "哈弗汽车欢迎您。" << endl;
}
};
/*
简单工厂模式
*/
class CarFactory
{
private:
CarFactory()
{

}
public:
static Car* CreateCar(char* name)
{
if (name == NULL)
{
cout << "请输入正确的汽车品牌!" << endl;
return NULL;
}
Car* car = NULL;
if (strcmp(name,"BMW")==0)
{
car = new BMW("BMW");
}
else if (strcmp(name, "Benz") == 0)
{
car = new Benz("Benz");
}
else if (strcmp(name, "Haval") == 0)
{
car = new Haval("Haval");
}
else
{
cout << "请输入正确的汽车品牌!" << endl;
return NULL;
}
return car;
}
};
int main(int argc, char *argv[])
{
Car* bmw = CarFactory::CreateCar("BMW");
Car* benz = CarFactory::CreateCar("Benz");
Car* haval = CarFactory::CreateCar("Haval");
bmw->run();
benz->run();
haval->run();

return EXIT_SUCCESS;
}

运行结果



简单工厂的优缺点

我们从代码中可以看出,工厂生成汽车产品,我们必须提供汽车产品的型号呀,不然工厂怎么知道要生成汽车呀,所有用户必须提供一个工厂能够生产汽车的类型。这确实将我们从亲自制造产品中解脱出来了,有木有,让工厂帮我们生成产品,这是优点。但是你发现缺点了没有,如果客户需要其他品牌的汽车,我们的工厂 是不是又要进行扩充 增加生成线呢?增加更多的else if 来判断用户的需要的汽车类型啊,世界上汽车品牌那么多,我们的工厂 难度要成为世界工厂 什么汽车都要生产和制造?这就是问题,如何解决呢?请看下集 设计模式:工厂方法模式(C++)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: