设计模式:简单工厂模式(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++)。相关文章推荐
- C++设计模式——简单工厂模式
- 设计模式之 简单工厂模式(C++ 模板实现)
- [Gof设计模式]简单工厂模式和工厂模式的C++实现
- C++设计模式之简单工厂模式
- C++设计模式——简单工厂模式
- 批注:C++设计模式——简单工厂模式:归类
- C++实现设计模式之 — 简单工厂模式
- C++设计模式之简单工厂模式(一)
- C++设计模式之简单工厂模式
- C++设计模式——简单工厂模式
- c++设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
- c++设计模式:简单工厂模式(Simple Factory Pattern)
- C++设计模式——简单工厂模式及具体应用(含例子)
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 设计模式之简单工厂模式(使用C++)
- 设计模式——简单工厂模式(C++)
- 设计模式之简单工厂模式,C++实现
- C++ 设计模式之——简单工厂模式(SimpleFactoryPattern)
- C++设计模式之 简单工厂模式讲解(历史上最简单明白的例子)
- C++设计模式(3):简单工厂模式