工厂模式C++实现(三种工厂模式附详细注释)

工厂模式(统称)

工厂模式是一种创建型模式,适用场景:安全的创建对象。

简单工厂模式

顾名思义,工厂是用来生产东西的,而在C++里面就是用来生产对象的。
就像一家餐厅一样,你可以按照你的方式来点餐。在工厂模式中也一样,你可以要求工厂为你生产不同的对象。
闲话不多说,直接上代码!

#include<iostream>
#include<string>
using namespace std;
class Produce;//声明产品类 
class Factory;//声明工厂类 
class Factory
{
	public:
		Factory(){
		}
		~Factory(){
		}
		virtual Produce* create_produce(string class_name,string name)=0;
											//工厂生产产品,这里的纯虚函数是为了让子工厂生产产品
											//返回的是一个产品类指针,这就代表了一个产品
											//这里的name参数是为了返回想要的产品qwq 
};
class Produce
{
	public:
		Produce(){
		}
		~Produce(){
		}
		virtual void show_myname()=0;//这里定义的纯虚函数是为了让派生类去实现这个函数,有纯虚函数的类是抽象类 
};
//现在我要开始创建具体的产品了
class Produce_apple:public Produce//这是一个具体的苹果类 
{
	private:
		string name;
	public:
		Produce_apple(string new_name="")
		{
			this->name = new_name;
		}
		virtual void show_myname()//重写父类函数 
		{
			cout<<"我的名称是:"<<name<<endl;
		}
};
class Produce_pear:public Produce//这是一个具体的梨类 
{
	private:
		string name;
	public:
		Produce_pear(string new_name="")
		{
			this->name = new_name;
		}
		virtual void show_myname()//重写父类函数
		{
			cout<<"我的名称是:"<<name<<endl;
		}
};
class Produce_badfruits:public Produce//这是一个具体的坏水果类 
{
	private:
		string name;
	public:
		Produce_badfruits(){
		}
		virtual void show_myname()//重写父类函数
		{
			cout<<"此产品已经过期!!"<<endl;
		}
};
//下面开始创建具体的工厂类 
class Factory_fruits:public Factory//这是个水果工厂类
{
	public:
		Factory_fruits(){
		}
		~Factory_fruits(){
		}
		virtual Produce* create_produce(string class_name,string name)
		{
			if (class_name=="apple")
			{
				Produce * my_produce = new Produce_apple(name);//创建name的apple产品 
				return my_produce;
			}
			else if (class_name=="pear")
			{
				Produce * my_produce = new Produce_pear(name);//创建name的pear产品
				return my_produce;
			}
			else
			{
				Produce * my_produce = new Produce_badfruits();//创建name的pear产品
				return my_produce;
			}
		}
};
//初期的搭建工作已经完成,总结一下,我们搭建了两个抽象类:工厂类,产品类;
											    //产品派生类:苹果类,梨类,坏水果类
												//工厂派生类:水果工厂类。
												//现在我们要用这些东西了
int main()
{
	Factory * my_factory_fruits = new Factory_fruits();//创建一个抽象工厂对象"升级"为水果工厂
													//这里的"升级"是我的理解 ,事实上是类型转换 
	Produce * my_produce_apple = my_factory_fruits->create_produce("apple","红富士");
	//创建抽象产品对象,"升级"为水果工厂加工出来的apple,红富士 
	Produce * my_produce_pear = my_factory_fruits->create_produce("pear
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值