【C++设计模式】之工厂模式,小白一看就懂

1. 工厂模式

工厂模式是一种创建型模式,本文介绍两种工厂模式:简单工厂模式和抽象工厂模式。
通过工厂来创建实例,用户只负责使用。将用户的创建和使用分离,提高了代码的灵活性和可维护性。

2. 简单工厂模式

简单工厂模式就是一个工厂类,根据用户所提供的信息不同创建出不同的实例。用户只需要关系提供的信息,不需要关注实例创建的过程。
优点:

  1. 提高维护性:所有的对象创建都在工厂类中,方便集中管理。
  2. 降低耦合性:用户不需要知道具体的实例实现的过程。

缺点:
扩展性比较差,每次新增一个新的产品的时候都需要修改工厂类,违背了开放封闭原则。

结构组成:

抽象产品类:产品的公共接口,所有产品类继承此类,并在此类基础上增添相应特色。
具体产品类:继承抽象产品类,是具体的产品,具体产品的功能实现在这里。
工厂类:负责实例化产品。

简单工厂代码实现

# include<iostream>
# include<string>
using namespace std;
//抽象产品类 -- 鞋类
class Shoes
{
public:
	virtual void Show() = 0;
};
//具体产品类 -- 李宁鞋
class Lining:public Shoes
{
public:
	void Show()override
	{
		cout << "李宁鞋" << endl;
	}
};
//具体产品类 -- 耐克鞋
class Nike :public Shoes
{
public:
	void Show()override
	{
		cout << "耐克鞋" << endl;
	}
};
//工厂类
class ShoesFactory
{
public:
	static Shoes* CreateShoes(string type)
	{
		if (type == "耐克")
		{
			return new Nike();
		}
		else if (type == "李宁")
		{
			return new Lining();
		}
		else
		{
			cout << "没有这个产品" << endl;
			return nullptr;
		}
	}
};
int main()
{
	Shoes* ps = nullptr;
	ps = ShoesFactory::CreateShoes("足力健");
	ps = ShoesFactory::CreateShoes("耐克");
	ps->Show();
	delete ps;
	ps = nullptr;
}

3. 抽象工厂模式

简单工厂模式只给产品抽象了,抽象工厂模式给工厂也抽象了。
在简单工厂模式中只有一个工厂来创建产品,在实际生活中,更加真实的是不同工厂侧重于不同的产品。这就是抽象工厂模式。
结构组成:

抽象产品类:这种产品的公共接口类
具体产品类:继承抽象产品类,工厂实例化的对象就是具体的产品
抽象工厂类:提供创建具体产品的接口
具体工厂类:继承抽象工厂,实现创建具体产品对象的方法

抽象工厂模式代码实现

//抽象工厂模式
# include<iostream>
# include<string>
using namespace std;
//抽象产品类1 -- 椅子
class Chair
{
public:
	virtual void Show_Chair() = 0;
};
//抽象产品类2 -- 沙发
class Sofa
{
public:
	virtual void Show_Sofa() = 0;
};
//具体产品类1 -- 木头椅子
class MuTou_Chair :public Chair
{
public:
	void Show_Chair()override
	{
		cout << "木头椅子" << endl;
	}
};
//具体产品类2 -- 金属椅子
class JinShu_Chair :public Chair
{
public:
	void Show_Chair()override
	{
		cout << "金属椅子" << endl;
	}
};
//具体产品类3 -- 木头沙发
class Mutou_Sofa :public Sofa
{
public:
	void Show_Sofa()override
	{
		cout << "木头沙发" << endl;
	}
};
//具体产品类4 -- 金属沙发
class JinShu_Sofa :public Sofa
{
public:
	void Show_Sofa()override
	{
		cout << "金属沙发" << endl;
	}
};
//抽象工厂类
class Factory
{
public:
	virtual Chair* CreateChair() = 0;
	virtual Sofa* CreateSofa() = 0;
};
//具体工厂类1 -- 木头工厂
class Muto_Factory:public Factory
{
public:
	Chair* CreateChair()override
	{
		return new MuTou_Chair();
	}
	Sofa* CreateSofa()override
	{
		return new Mutou_Sofa();
	}
};
//具体工厂类2 -- 金属工厂
class JinShu_Factory:public Factory
{
public:
	Chair* CreateChair()override
	{
		return new JinShu_Chair();
	}
	Sofa* CreateSofa()override
	{
		return new JinShu_Sofa();
	}
};
int main()
{
	//金属厂子流水线
	Factory* pJinShu_Factory = new JinShu_Factory();
	Chair* pJinShu_Chair = pJinShu_Factory->CreateChair();
	pJinShu_Chair->Show_Chair();
	Sofa* pJinShu_Sofa = pJinShu_Factory->CreateSofa();
	pJinShu_Sofa->Show_Sofa();
	delete pJinShu_Factory;
	delete pJinShu_Chair;
	delete pJinShu_Sofa;
	pJinShu_Factory = nullptr;
	pJinShu_Chair = nullptr;
	pJinShu_Sofa = nullptr;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LiuJWHHH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值