C++设计模式之简单工厂模式的实现示例

 更新时间:2021年06月04日 15:34:11   作者:WhiteShirtI  
这篇文章主要给大家介绍了关于C++设计模式之简单工厂模式的相关资料,简单工厂模式,主要用于创建对象,添加类时,不会影响以前的系统代码,需要的朋友可以参考下

前言

在我们要使用一个对象时,就必须通过类来实例化对象,也就是需要new一个对象。在new的过程是非常复杂的,要经过读文件->解析文本->创建对象->给属性设值等过程。而引入工厂模式,就是将创建类的这个步骤又工厂来帮我们完成,我们只需要去使用工厂里创建好的类即可。在使用工厂时,我们需要让工厂知道我们想要的一个对象,所以我们可以通过传参的方式去告诉工厂我们的需求

定义思想:在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

优点:

  1. 实现了客户端和具体实现类的解耦
  2. 客户端免除了直接创建产品对象的责任,而仅仅“消费”产品产品
  3. 客户端无需知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可

缺点:

  1. 想要增加新的产品类时需要修改源代码,不符合开闭原则
  2. 工厂类中集中了所有产品类的创建逻辑,如果这个类发生了问题。整个系统都要受到影响

适用场景:

  1. 工厂类负责创建的对象比较少
  2. 客户端只知道传入工厂类的参数,对于如何创建对象不关心:

由于简单工厂模式不符合开闭原则,所以大佬将该模式从24种设计模式中移除

代码实现(手机产品)

首先创建一个抽象手机类,指定具体产品手机必须具有指定功能,也就是产品类必须要重写该类中的方法

//抽象手机
class AbstractPhone
{
public:
	virtual void ShowName() = 0;
};

具体产品的手机继承抽象手机类并对其方法进行重写

//华为
class Huawei : public AbstractPhone
{
public:
	virtual void ShowName()
	{
		cout << "Huawe Phone" << endl;
	}
};

//小米
class Xiaomi : public AbstractPhone
{
public:
	virtual void ShowName()
	{
		cout << "Xiaomi Phone" << endl;
	}
};

//苹果
class Apple : public AbstractPhone
{
public:
	virtual void ShowName()
	{
		cout << "Apple Phone" << endl;
	}
};

通过传入的参数来确定需要生成哪种手机

//手机工厂
class PhoneFactory
{
public:
	static AbstractPhone* CreatePhone(string name)
	{
		if (name == "huawei")
			//...生产细节
			return new Huawei;
		else if (name == "xiaomi")
			//...生产细节
			return new Xiaomi;
		else if (name == "apple")
			//...生产细节
			return new Apple;
		else
			return nullptr;
	}
};

测试:

void test()
{
	//创建工厂
	PhoneFactory* factor = new PhoneFactory;
	//创建手机
	AbstractPhone* phone;
	//指定工厂需要创建的手机
	phone = factor->CreatePhone("huawei");
	phone->ShowName();
	delete phone;

	phone = factor->CreatePhone("xiaomi");
	phone->ShowName();
	delete phone;

	phone = factor->CreatePhone("apple");
	phone->ShowName();
	delete phone;

	delete factor;
}

运行截图:

总结

到此这篇关于C++设计模式之简单工厂模式的文章就介绍到这了,更多相关C++简单工厂模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解设计模式中的中介者模式在C++编程中的运用

    详解设计模式中的中介者模式在C++编程中的运用

    这篇文章主要介绍了设计模式中的中介者模式在C++编程中的运用,中介者模式将对象间的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性,需要的朋友可以参考下
    2016-03-03
  • 浅谈C/C++中指针和数组的不同

    浅谈C/C++中指针和数组的不同

    本文主要解析了C/C++中数组和指针的区别,文章简单易懂,对各位的工作学习有所帮助,有需求的朋友可以了解下
    2020-05-05
  • C语言函数栈帧的创建与销毁详解

    C语言函数栈帧的创建与销毁详解

    这篇文章主要为大家详细介绍了C语言函数栈帧的创建与销毁,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • OpenCV绘制正多边形的方法

    OpenCV绘制正多边形的方法

    这篇文章主要为大家详细介绍了OpenCV绘制正多边形的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • C语言线性表顺序表示及实现

    C语言线性表顺序表示及实现

    这篇文章主要介绍了C语言线性表顺序表示及实现,线性表是最常用且最简单的一种数据结构。简而言之,一个线性表是n个数据元素的有限序列
    2022-07-07
  • 详解C++中普通旧数据(POD)的使用

    详解C++中普通旧数据(POD)的使用

    普通旧数据就是内存中的连续字节序列,是能够被“仅当作数据”处理的对象。这篇文章主要带大家了解一下C++中普通旧数据的定义与使用,感兴趣的可以了解下
    2023-03-03
  • Qt利用QState状态机实现控件互斥操作详解

    Qt利用QState状态机实现控件互斥操作详解

    这篇文章主要为大家详细介绍了Qt如何利用QState状态机实现控件互斥操作,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • C++贪心算法实现马踏棋盘

    C++贪心算法实现马踏棋盘

    这篇文章主要为大家详细介绍了C++贪心算法实现马踏棋盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C 语言指针概念的详解

    C 语言指针概念的详解

    这里主要介绍C 语言指针,这里整理了详细的资料,对指针做了详细说明及简单示例代码帮助大家理解什么是指针,有兴趣的小伙伴可以参考下
    2016-08-08
  • C++控制台用定时器实例代码

    C++控制台用定时器实例代码

    这篇文章主要介绍了C++控制台用定时器实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02

最新评论