C++设计模式 - 简单工厂,工厂方法和抽象工厂

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达!目录如果需要录屏资料,请私信邮箱shitou3000@qq.com获取。...
摘要由CSDN通过智能技术生成

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达!

设计模式概念

设计模式简单来说就是在解决某一类问题场景时,有既定的,优秀的代码框架可以直接使用,与我们自己摸索出来的问题解决之道相比较,有以下优点可取:

  1. 代码更易于维护,代码的可读性,复用性,可移植性,健壮性会更好
  2. 当软件原有需求有变更或者增加新的需求时,合理的设计模式的应用,能够做到软件设计要求的“开-闭原则”,即对修改关闭,对扩展开放,使软件原有功能修改,新功能扩充非常灵活
  3. 合理的设计模式的选择,会使软件设计更加模块化,积极的做到软件设计遵循的根本原则“高内聚,低耦合

因此掌握常用的设计模式非常有必要,无论是找工作,还是对于我们自己的项目软件设计,都很有帮助。

Simple Factory简单工厂

简单工厂(Simple Factory)不属于标准的OOP设计模式中的一项,在编写大型C++软件的时候,代码里面会出现很多的类,每次创建对象的时候,都需要通过new 类名称的方式来生成对象,这样一来,用户需要记忆很多类的名称,暂且不管记不记得住,这样的设计使得代码很难维护,类名如果做了改变,那么所有使用类名称的地方都需要去修改,耦合性太强,不符合我们软件设计的思想,Simple Factory就是在这样的需求下诞生的。

先看看简单工厂模式的UML设计类图:
在这里插入图片描述
从上面的UML类图可以看出,所有对象的创建不再通过new 类名称的方式进行了,而是把对象的创建都封装在了SimpleFactory类的createProduct方法当中,通过传入一个事先设计好的枚举类型,然后返回一个对应的对象,既解耦了对象的创建,还不用再记忆那么多的类名。下面通过代码演示SimpleFactory简单工厂的使用,代码如下:

  1. 产品Product基类
#include <iostream>
#include <string>
#include <memory>
using namespace std;
// 产品类型
class Product
{
   
public:
	Product(string name) :_name(name) {
   }
	// 模拟产品对象的一个抽象方法
	virtual void show() = 0;
protected:
	string _name;
};
  1. 具体的产品Product派生类型
// 产品实体类型定义
class ProductA : public Product
{
   
public:
	ProductA(string name) :Product(name){
   }
	void show() {
    cout << "获取了一个ProductA对象:" << _name << endl; }
};
// 产品实体类型定义
class ProductB : public Product
{
   
public:
	ProductB(string name) :Product(name) {
   }
	void show() {
    cout << "获取了一个ProductB对象:" << _name << endl;
	}
};
  1. 创建描述产品类型的枚举和简单工厂类
// 产类枚举类型定义
enum ProductType
{
   
	XIAOMI,
	HUAWEI,
};
// 简单工厂类
class SimpleFactory
{
   
public:
	// 通过传入的枚举类型,创建相应的对象,返回所有对象的基类指针
	Product* createProduct(ProductType type)
	{
   
		switch (type)
		{
   
		case XIAOMI:
			return new ProductA("小米手机");
		case HUAWEI:
			return new ProductB
  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值