简单工厂模式
定义:
定义一个工厂类根据不同参数创建其他类的实例
优点:
(1)将实例创建与使用分离
(2)可通过配置增加新的产品类,灵活扩展
(3)客户端可不关心产品类类名,只需知道参数定义和生成实例的对应关系
缺点:
(1)工厂类集合了所有创建逻辑,指责过大,一旦崩溃影响很大
(2)新增加参评类需要同步修改工厂类
使用范围:
众多相似关系的产品独立创建各自实例情况,如调用各种控件等
结构:
实现简单工厂创建a和b2个产品
实现:
namespace creational_pattern
{
class product{};
class a_product : public product {};
class b_product : public product {};
class simple_factory
{
public:
static std::shared_ptr<product> get_product(int type = 0)
{
if (1 == type)
return std::shared_ptr<product>{new a_product};
return std::shared_ptr<product>{new b_product};
}
};
}
测试:
基于GoogleTest 的单元测试框架;框架可参考如下网址:
https://www.cnblogs.com/jycboy/p/gtest_catalog.html
using namespace creational_pattern;
TEST(test_simple_factory_get_product, get_a_product)
{
std::cout << typeid(simple_factory::get_product(1)).name() << std::endl;
}
总结
(1)工厂类负责根据参数创建不同类实例
(2)工厂类创建实例方法最好设置为静态