- 简单工厂(Simple Factory)模式:又称静态工厂方法(Static Factory Method)模式
- 工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式
- 抽象工厂(Abstract Factory)模式:又称工具箱(Kit 或 Toolkit)模式
#ifndef __FRUIT_H__
#define __FRUIT_H__
class IFruit
{
public:
virtual ~IFruit() {};
virtual void ShowName() = 0;
};
class CApple:public IFruit
{
public:
CApple();
~CApple();
void ShowName();
};
class COrange:public IFruit
{
public:
COrange();
~COrange();
void ShowName();
};
class CPear:public IFruit
{
public:
CPear();
~CPear();
void ShowName();
};
#endif
#include "Fruit.h"
#include <iostream>
CApple::CApple()
{
}
CApple::~CApple()
{
}
void CApple::ShowName()
{
std::cout << "I am Apple\n";
}
COrange::COrange()
{
}
COrange::~COrange()
{
}
void COrange::ShowName()
{
std::cout << "I am Orange\n";
}
CPear::CPear()
{
}
CPear::~CPear()
{
}
void CPear::ShowName()
{
std::cout << "I am Pear\n";
}
#ifndef __FRUIT_FACTORY_H__
#define __FRUIT_FACTORY_H__
class IFruit;
class CFruitFactory
{
public:
CFruitFactory();
~CFruitFactory();
static IFruit* MakeFruit(const char* szName);
};
#endif
#include <iostream>
#include "FruitFactory.h"
#include "Fruit.h"
CFruitFactory::CFruitFactory()
{
}
CFruitFactory::~CFruitFactory()
{
}
IFruit* CFruitFactory::MakeFruit(const char* szName)
{
IFruit* pFruit = NULL;
if (strcmp(szName,"Apple") == 0)
{
pFruit = new CApple();
}
else if (strcmp(szName,"Orange") == 0)
{
pFruit = new COrange();
}
else if (strcmp(szName,"Pear") == 0)
{
pFruit = new CPear();
}
return pFruit;
}
#include <iostream>
#include "Fruit.h"
#include "FruitFactory.h"
int main()
{
const char* pNames[4] = {"Apple","Orange","Pear","Watermelon"};
for (int i = 0; i < 4; ++i)
{
IFruit* pFruit = CFruitFactory::MakeFruit(pNames[i]);
if (pFruit != NULL)
{
pFruit->ShowName();
}
else
{
printf("Not exist fruit: %s\n",pNames[i]);
}
}
return 0;
}
I am Orange
I am Pear
Not exist fruit: Watermelon
请按任意键继续. . .