简单工厂模式介绍

简单工厂模式并不是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++)【看不懂算我输】相关推荐

  1. JavaScript设计模式--简单工厂模式例子---XHR工厂

    JavaScript设计模式--简单工厂模式例子---XHR工厂 第一步,Ajax操作接口(目的是起一个接口检测作用) (1)引入接口文件 //定义一个静态方法来实现接口与实现类的直接检验 //静态方 ...

  2. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  3. 设计模式—简单工厂模式

    前言 简单工厂模式是一种比较容易理解的设计模式 简单工厂模式介绍 在设计模式中,简单工厂模式可以理解为负责生产对象的一个类,当使用new 关键字创建一个对象时,此时该类就依赖于这个对象,也就是他们间的 ...

  4. 设计模式 - 简单工厂模式

    文章目录 设计模式 - 简单工厂模式 1.意图 2.实例 1.创建颜色接口 - 定义生产的产品是什么 2.创建颜色枚举 - 定义生产哪些类型的产品 3.根据颜色枚举创建产品 - 根据产品清单生产产品 ...

  5. 轻松看懂java设计模式简单工厂模式

    点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...

  6. 面向对象编程设计模式--简单工厂模式讲解(历史上最简单明白的例子)

    工作之余,在看资料过程中发现一个极易理解的简单工厂模式的例子,自己亲自试练一番,感觉对这个设计模式不熟悉的朋友, 一看马上就知道是什么回事了. 简单工厂模式根据提供给它的数据,返回几个可能类中的一个类 ...

  7. [设计模式] ------ 简单工厂模式

    简单工厂模式 不同类型下创建对应的不同的对象,得到不同的结果,就叫简单生产模式 比如 定义一个接口,叫A,里面有方法a,返回int类型 类B1实现A接口,也实现a方法,里面做的是加法运算 类B2实现A ...

  8. C#设计模式——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  9. 设计模式 -- 简单工厂模式

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初识简单 ...

最新文章

  1. 【OpenCV 4开发详解】均值滤波
  2. WinCE 自由拼音输入法的测试
  3. 画风清奇!看看大佬怎么玩Python
  4. 裤子换裙子,就问你GAN的这波操作秀不秀
  5. 洛谷P4727:图的同构计数(Polya引理)(dfs)
  6. c#读蓝牙数据_CSharp--BlueTooth 实现蓝牙通讯的程序 C#开发 可以发送和接收数据 方便二次开发 - 下载 - 搜珍网...
  7. 每日一题(22)——malloc与free(三)
  8. Android百度地图开发之开发第一个小应用,显示基础的地图页面
  9. VScode+ROS(C++)代码断点调试实践笔记
  10. 局域网传文件_手机和电脑之间互传比较大的文件,哪种方式比较好?
  11. 30种SQL查询语句优化方法
  12. 红外图像是什么?红外线与计算机视觉相关的研究方向?(Visible and infrared image fusion)
  13. 人才网运营之填充数据心得之骑士人才系统用火车头职位采集规则填充人才网数据
  14. IGH_Master主站配置驱动伺服电机和变频器总结
  15. VirtualBox虚拟机安装Win10企业版
  16. 【已成功安装但无法使用】Python 3.10.2 安装pyodbc
  17. 数据分析工具的深度对比:FineBI vs PowerBI
  18. python代码 素数集合 回文素数,反素数,梅森素数,双素数
  19. Lightbox改造——支持滚轮缩放
  20. 打印机出现“错误-正在打印”的处理办法

热门文章

  1. Option键竟然如此强大,99.9%的Mac用户不知道的高效秘技
  2. 第5课 开心的金明《聪明人的游戏:信息学探秘.提高篇》(优化空间)
  3. 1.13编程基础之综合应用 45 十进制到八进制 python
  4. php5.4.45的php.ini文件
  5. php mysql 连接不上_php连接不上MySQL问题解决办法_PHP教程
  6. 【ES6(2015)】Function函数
  7. linux ls命令shell脚本位置,linux - shell脚本到ls并在ls上执行命令结果 - SO中文参考 - www.soinside.com...
  8. python用动态规划求删除路径_Python | 动态规划求解TSP
  9. 信息安全工程师笔记-网络安全漏洞防护技术原理与应用
  10. C++ opengl 方向光