设计模式----工厂模式

本文详细介绍了工厂模式的基本概念,包括简单工厂模式的实例演示和多态工厂模式的扩展,展示了如何通过工厂类动态创建不同类型的对象,提高代码的灵活性和可扩展性。

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

什么是工厂模式

很多的人学习的时候,都是走马观花式的学习,学习了都不理解,也不知道怎么去使用,讲的东西有什么用。学习过的东西最好是自己能够说出来,举个例子出来才算过关。
工厂模式,简单理解就是有这么一个类,这个类不是我们经常使用的类一样,它不是维护数据和处理数据的方法,它就是专门生产其他类的,就好比一个铁具生产厂一样,能够生产各式各样的工具,然后每种工具可以做不同的事情,类工厂生产普通的类,每个类的作用也不同一样。

工厂模式的结构

1.简单工厂模式

#include <iostream>
class A
{
public:
		A(){}
		~A(){}
		void produce()
		{
			std::cout << "生产A商品" << std::endl;
		}
};
class B
{
public:
	B() {}
	~B() {}
	void produce()
	{
		std::cout << "生产B商品" << std::endl;
	}
};
class Factory
{
public:
	Factory(){}
	~Factory(){}

	void* createCode(int flag)
	{
		//这里可以设置自己要生产类的类型
		if (flag == 0)
		{
			return new A;
		}
		else if (flag == 1)
		{
			return new B;
		}
	}
};

测试main

#include <iostream>
using namespace std;
int mian()
{
	//创建工厂
	Factory f;
	//生产出A类
	A* a=(A*)f.createCode(0);
	a->produce();

	//生产出B类
	B* b=(B*)f.createCode(1);
	b->produce();
}

2.工厂模式

发现上面的代码只能生产A,B商品,如果要生产C商品的话,我们就要去修改我们代码继续增加else if了,这就违背了软件设计的原则,对扩展开放,对修改关闭。因此我们要升级我们的代码。所以我们的工厂规模越来越大了,总公司就不在生产商品了,商品由各个不同子公司去生产。

#include <iostream>
class A
{
public:
		A(){}
		~A(){}
		void produce()
		{
			std::cout << "生产A商品" << std::endl;
		}
};
class B
{
public:
	B() {}
	~B() {}
	void produce()
	{
		std::cout << "生产B商品" << std::endl;
	}
};
class Factory
{
public:
	Factory(){}
	~Factory(){}
	virtual void* createCode()=0};

//子工厂生产A商品
class FactoryA:public Factory
{
	void* createCode()
	{
		return new A;
	}
}

//子工厂生产B商品
class FactoryB:public Factory
{
	void* createCode()
	{
		return new B;
	}
}

//如果要生产C商品
class FactoryC:public Factory
{
	void* createCode()
	{
		return new C;
	}
}

测试

#include <iostream>
using namespace std;
int mian()
{
	//生产A(多态的使用)
	Factory *f =new FactoryA();
	A* a=(A*)f->createCode();

	//生产B(多态的使用)
	Factory *f =new FactoryB();
	B* b=(B*)f->createCode();

	//生产C(多态的使用)
	Factory *f =new FactoryB();
	C* c=(C*)f->createCode();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值