工厂模式,主要是定义一个抽象类,在抽象类中定义纯虚函数,然后在派生类中,将实现虚函数。
比如说,一个系统,需要把系统的各个模块启动或者分别销毁了,每个模块都有一个create函数和destroy函数。
定义抽象基类,所有模块继承这个抽象基类,然后使用抽象基类指针指向这些模块的派生类对象,一一调用create,或者一一调用destroy。
实现了动态绑定,好处就是方便扩展。
FactoryRealA,FactoryRealB,FactoryRealC分别继承了FactoryAbstract,
以下程序实现了工厂模式应用的一种例子,统一调用create函数和destroy函数。动态联编。
#include <iostream>
class FactoryAbstract
{
public:
virtual void create() = 0;
virtual void destroy() = 0;
};
class FactoryRealA:public FactoryAbstract
{
public:
virtual void create()
{
std::cout<<"create A"<<std::endl;
}
virtual void destroy()
{
std::cout<<"destroy A"<<std::endl;
}
};
class FactoryRealB:public FactoryAbstract
{
public:
virtual void create()
{
std::cout<<"create B"<<std::endl;
}
virtual void destroy()
{
std::cout<<"destroy B"<<std::endl;
}
};
class FactoryRealC:public FactoryAbstract
{
public:
virtual void create()
{
std::cout<<"create C"<<std::endl;
}
virtual void destroy()
{
std::cout<<"destroy C"<<std::endl;
}
};
int main()
{
FactoryRealA *A = new FactoryRealA();
FactoryRealB *B = new FactoryRealB();
FactoryRealC *C = new FactoryRealC();
FactoryAbstract *Abstract[3] = {A,B,C};
int num = sizeof(Abstract)/sizeof(Abstract[0]);
int i = 0;
for(i = 0; i < num; i++)
{
Abstract[i]->create();
}
for(i = 0; i < num; i++)
{
Abstract[i]->destroy();
}
}