c++ 设计模式23讲之工厂模式

工厂模式与简单工厂的区别在与,简单工厂是工厂类创建实例对象;工厂模式是对不同产品类增加各自的创建工厂类

工厂模式

定义:

定义一个创建产品对象的接口工厂,用接口工厂的派生类实现对产品派生类的创建

优点:

(1)产品实例的细节进行封装,向客户隐藏了实例化步骤

(2)增加新产品只需增加产品类和生成产品实例的工厂类

缺点:

(1)产品类与产品实例生成类成对出现和维护

(2)增加了中间类代码编写维护量增加

使用范围:

客户端对创建实例与使用分离的情况,存在相似产品的集合。

如对不同类型文件解析等

结构:

 

实现:

namespace creational_pattern
{
	class product 
	{
	public:
		virtual void print() = 0;
	};
	class a_product : public  product 
	{ 
	public:
		void print() override { std::cout << 'A' << std::endl; } 
	};
	class b_product : public  product 
	{ 
	public:
		void print() override { std::cout << 'B' << std::endl; }
	};

	class factory_pattern
	{
	public:
		virtual std::shared_ptr<product> get_product() = 0;
	};

	class a_product_factory_pattern : public factory_pattern
	{
	public:
		std::shared_ptr<product> get_product() override
		{
			return std::shared_ptr<product>{new a_product};
		}
	};
	class b_product_factory_pattern : public factory_pattern
	{
	public:
		std::shared_ptr<product> get_product() override
		{
			return std::shared_ptr<product>{new b_product};
		}
	};
} 

测试:

基于GoogleTest 的单元测试框架;框架可参考如下网址:

https://www.cnblogs.com/jycboy/p/gtest_catalog.html

TEST(test_factory_pattern_get_product, get_a_product)
{
	a_product_factory_pattern a_product;
	a_product.get_product().get()->print();
}

TEST(test_factory_pattern_get_product, get_b_product)
{
	b_product_factory_pattern b_product;
	b_product.get_product().get()->print();
}

总结

(1)工厂模式是常用模式之一,基于简单工厂模式,将根据参数创建实例的步骤分成工厂派生类创建

(2)工厂模式适用于只有一层的产品等级(一维关系)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值