1.1 模式定义
简单工厂模式:将创建不同对象的代码封装到具体产品类中;
将创建这些具体产品类的公共代码封装到到抽象产品类中;
定义一个工厂类,该类的静态方法可以根据不同参数创建不同的具体产品实例。
模式要点:需要什么类型的产品,只需传入一个正确的参数,就可以获得一个对应的实例。
1.2 模式结构图
1.3 模式角色
抽象产品Product: 具体产品类的父类,封装了各种具体产品的公共方法。
具体产品ConcreteProduct: 需要实例化的类。
工厂类Factory: 简单工厂模式的核心,负责创建所有具体产品的实例。
1.4 代码实现
bt_简单工厂模式.h
#ifndef SFP_H
#define SFP_H
#include <string.h>
#include <iostream>
using namespace std;
/*
定义抽象产品类
*/
class Product
{
public:
virtual ~Product(){}
};
/*
定义具体产品类
*/
class ConcreteProductA : public Product
{
public:
ConcreteProductA();
};
ConcreteProductA::ConcreteProductA()
{
cout << "创建具体产品A" << endl;
}
class ConcreteProductB : public Product
{
public:
ConcreteProductB();
};
ConcreteProductB::ConcreteProductB()
{
cout << "创建具体产品B" << endl;
}
/*
定义工厂类
*/
class Factory
{
public:
static Product* createProduct(const string& type)
{
if(type.compare("A") == 0)
{
return new ConcreteProductA;
}
if(type.compare("B") == 0)
{
return new ConcreteProductB;
}
else
{
cout << "unknown product type" << endl;
return NULL;
}
}
};
#endif // SFP_H
bt_简单工厂模式.cpp
#include "bt_简单工厂模式.h"
#include <iostream>
using namespace std;
int main()
{
cout << "***** 简单工厂模式测试 *****" << endl;
Product* product = NULL;
product = Factory::createProduct("A");
delete product;
return 0;
}
1.5 模式总结
简单工厂模式提供了用于创建对象的工厂类,将对象的创建和使用分量开来,其特点如下:
优点:
分离对象的创建和使用;用户只需通过具体产品对应的参数即可创建实例对象。
缺点:
工厂类职责过重;系统扩展困难,增加新产品必须修改工厂逻辑。
适用场景:
具体产品类比较少且稳定的情况。