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++简单工厂模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    前言 在我们要使用一个对象时,就必须通过类来实例化对象,也就是需要new一个对象.在new的过程是非常复杂的,要经过读文件->解析文本->创建对象->给属性设值等过程.而引入工厂模式,就是将创建类的这个步骤又工厂来帮我们完成,我们只需要去使用工厂里创建好的类即可.在使用工厂时,我们需要让工厂知道我们想要的一个对象,所以我们可以通过传参的方式去告诉工厂我们的需求 定义思想:在简单工厂模式中,可以根据参数的不同返回不同类的实例.简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通

  • php设计模式之简单工厂模式详解

    本文以实例形式较为详细的介绍了PHP设计模式的简单工厂模式,对于进行PHP程序设计来说有很好的借鉴作用.具体如下: 一.概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(A

  • Python设计模式之简单工厂模式实例详解

    本文实例讲述了Python设计模式之简单工厂模式.分享给大家供大家参考,具体如下: 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 下面使用简单工厂模式实现一个简单的四则运算 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' ''' 大话设计模式 用任意一种面向对象语言实现一个计算器控制台程序.要求输入两个数和运算符号,得到

  • 深入了解c# 设计模式之简单工厂模式

    简单工厂模式,需要说明的是,它并不属于GOF 23种设计模式中的一种.但它却丰富了工厂模式家族,因为其简单的思想和使用方式,也有很广泛的使用 简单工厂模式又称为静态工厂模式,它用来确定创建哪一种对象的实例.这种模式应该说是最简单最实用的工厂模式了,它将外界创建对象的逻辑收集起来,做到了对外界隔离对象的创建逻辑的目的,使外面完全的成为了对象实例的使用者,明确了职责. 不过这种模式也有着非常明显是的缺点,工厂类中集中了所有对象实例的创建逻辑,造成了功能的高内聚:另外在扩展方面,如果需要添加新的类,就

  • C#设计模式之简单工厂模式

    设计模式分类: 创建型模式. 结构型模式. 行为模式. 23种设计模式,如何记.面向对象的系统中有很多对象,创建型模式解决的问题就是如何创建对象,何时创建对象,它努力的让代码不要太多的关注对象的具体类型,不用关注对象的创建细节,而知需要了解对象的抽象类型,创建对象的工作由创建对象的工厂来实现.面向对象的系统中,对象如何组织,采用什么样的结构组织比较合理,这个是由结构型模式来处理的.合理的使用结构型模式可以使系统具备更好的灵活性.扩展性和维护性.行为模式规定了各个对象间的应该具备的职责. 严格来说

  • .Net设计模式之简单工厂模式(Simple Factory)

    简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 这个模式并不属于GoF23里面的设计模式,其实他属于一个过渡的模式,这个模式是为了引出下一篇要将的模式:工厂模式. 一.UML图 简单工厂模式解决的问题是如何去实例化一个合适的对象. 简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程.具体来说,

  • python3设计模式之简单工厂模式

    在Python3环境下,调试实现了<大话设计模式>中简单工厂模式,通过定义单独的工厂类,完成对具体的产品的实例化,参考链接 具体实现见代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # Date : 2017-10-15 21:46:28 # Author : John # Version : V1.001 # Func : class Operator(object): """docstring for Ope

  • 深入理解Java设计模式之简单工厂模式

    目录 一.什么是简单工厂模式 二.简单工厂模式的结构 三.简单工厂模式的应用场景 四.简单工厂模式和工厂方法模式区别 五.简单工厂模式和策略模式的异同 六.简单工厂模式的优缺点 七.简单工厂模式的实现 八.总结 一.什么是简单工厂模式 简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例. 其实就是将一个具体类的实例化交给一个静态工厂方法来执

  • java设计模式之简单工厂模式详解

    简单工厂模式:由一个工厂对象决定创建出哪一种类的实例. 1.抽象类 public abstract class People { public abstract void doSth(); } 2.具体类 public class Man extends People{ @Override public void doSth() { System.out.println("I'm a man,I'm coding."); } } 3.具体类 public class Girl exte

  • C++设计模式之简单工厂模式实例

    问题描述 之前在公司做了一个windows 8平台的阅读器.首先,需要将电子书中的内容渲染到屏幕上,而电子书每一页都包含各种各样的内容,比如:图形.图像和文字等等:不同的内容,就是不同的对象:在将不同的内容渲染到屏幕上之前,就需要new操作,建立不同的对象,然后再在屏幕上进行描绘.这个时候,就需要进行很多new操作,new操作分布在代码的不同地方,管理起来很麻烦,而且也很乱,到后期扩展和维护的时候,有的时候,对象多的让开发人员不知道这个对象是干什么的,这就增加了难度:同时,new操作,都会有对应

随机推荐