首页 > 代码库 > 简单工厂模式

简单工厂模式

1.静态工厂方法统一管理对象的创建。
静态工厂方法通过传入的参数判断决定创建哪一类产品的实例,封装了对象的创建,客户端只管消费,实现了对责任(模块)的分割。

2.静态工厂方法推迟了产品的实例化。
通过XML配置文件就能改变具体要创建的产品实例,修改为其它的产品实例,代码不须重新编译

注意:

抽象基类的析构函数必须为虚函数

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

class CPU
{
public:
    virtual void show() = 0;
    virtual ~CPU(){}  // 抽象基类的析构函数必须是虚析构,以保证delete基类指针的时候,子类的析构函数能被调用,实现内存的完全清理
};

class CPUA : public CPU
{
public:
    virtual void show()
    {
        cout << "I am CPUA" << endl;
    }
    ~CPUA()
    {
        cout << "CPUA 被析构" << endl;
    }
};

class CPUB : public CPU
{
public:
    virtual void show()
    {
        cout << "I am CPUB" << endl;
    }
    ~CPUB()
    {
        cout << "CPUB被析构" << endl;
    }
};

class Factory
{
public:
    static CPU *produceCPU(const string &name)
    {
        CPU *ret = NULL;
        if (name == "CPUA")
        {
            ret = new CPUA();
        }
        else if (name == "CPUB")
        {
            ret = new CPUB();
        }
        return ret;
    }
};

void test()
{
    CPU *cpu = Factory::produceCPU("CPUA");
    cpu->show();
    delete cpu;
    cpu = Factory::produceCPU("CPUB");
    cpu->show();
    delete cpu;
}

int main()
{
    test();
    cin.get();
    return 0;
}

效果:

技术分享

 

简单工厂模式