从头开始——简单工厂模式

本文介绍了简单工厂模式的概念,展示了其实现代码,包括产品基类、产品子类和工厂类。简单工厂模式通过参数决定创建哪种产品对象,降低了客户端的使用难度。然而,它也存在违背开放-封闭原则和高内聚、低耦合的问题,当添加新产品时需修改工厂类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单工厂模式

简单工厂模式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;
}

优点

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

缺点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值