1 创建型模式-----简单工厂模式

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 模式总结

简单工厂模式提供了用于创建对象的工厂类,将对象的创建和使用分量开来,其特点如下:

优点:

分离对象的创建和使用;用户只需通过具体产品对应的参数即可创建实例对象。

缺点:

工厂类职责过重;系统扩展困难,增加新产品必须修改工厂逻辑。

适用场景:

具体产品类比较少且稳定的情况。

猜你喜欢

转载自blog.csdn.net/u014725884/article/details/90105531