IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 从头开始——简单工厂模式 -> 正文阅读

[C++知识库]从头开始——简单工厂模式

简单工厂模式

简单工厂模式UML

简单工厂模式UML

简单工厂模式的实质是通过给工厂传入参数,动态的创建对应产品类对象(这些产品类继承自一个父类或接口)

#pragma once
#include <iostream>

#define SAFE_DELETE(ptr) if(ptr!=NULL) delete ptr
 
using namespace std;

//产品基类
class Product
{
public:
	virtual void Operator() = NULL;
};

//产品子类A
class ProductA : public Product
{
public:
	virtual void Operator() {
		cout << "产生产品A" << endl;
	}
};

//产品子类B
class ProductB : public Product
{
public:
	virtual void Operator() {
		cout << "产生产品B" << endl;
	}
};

//参数枚举
enum {
	PRODUCTA,
	PRODUCTB,
};

//工厂类
class Factory
{
public:
	Factory() {
		memset(this,0,sizeof(*this));
	}

	Product* createProduct(int param) {
		switch (param)
		{
		case PRODUCTA:
			product = new ProductA;
			break;
		case PRODUCTB:
			product = new ProductB;
			break;
		default:
			cout << "参数错误" << endl;
			break;
		}

		if (NULL == product) {
			cout << "产品创建失败,可能是内存不够了" << endl;
			return NULL;
		}
		return product;
	}
private:
	Product* product;
};


int main() {
	Factory a;
	Product* b = a.createProduct(PRODUCTA);
	if (b != NULL) {
		b->Operator();
	}

	Product* c = a.createProduct(PRODUCTB);
	if (c != NULL) {
		c->Operator();
	}

	SAFE_DELETE(b);
	SAFE_DELETE(c);
	
	return 0;
}

优点

在简单工厂模式中,外部可以只通过参数来确定创建哪个具体类的对象,不用考虑这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化

缺点

违背了开放—封闭原则高内聚、低耦合的设计理念。如果把所有的创建逻辑都放在一个工厂内,那么如果要增加新的产品类,那么就要对这个工厂进行维护,如果判断逻辑比较复杂那对于整个程序和维护人员都将是灾难

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 15:59:31  更:2022-04-06 16:01:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:19:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码