#include <iostream>
using namespace std;
struct ISingleCore
{
public:
virtual ~ISingleCore() { }
virtual void Produce() = 0;
};
class CSingleCoreA : public ISingleCore
{
public:
virtual ~CSingleCoreA() { }
virtual void Produce() { cout<<"Single Core A"<<endl; }
};
class CSingleCoreB : public ISingleCore
{
public:
virtual ~CSingleCoreB() { }
virtual void Produce() { cout<<"Single Core B"<<endl; }
};
struct IFactory
{
public:
virtual ~IFactory() { }
virtual ISingleCore* CreateSingleCore() = 0;
};
class CFactoryA : public IFactory
{
public:
virtual ~CFactoryA() { }
virtual ISingleCore* CreateSingleCore() { return new CSingleCoreA(); }
};
class CFactoryB : public IFactory
{
public:
virtual ~CFactoryB() { }
virtual ISingleCore* CreateSingleCore() { return new CSingleCoreB(); }
};
void main()
{
//
CFactoryA factoryA;
ISingleCore *pSingleCoreA = factoryA.CreateSingleCore();
pSingleCoreA->Produce();
delete pSingleCoreA;
//
CFactoryB factoryB;
ISingleCore *pSingleCoreB = factoryB.CreateSingleCore();
pSingleCoreB->Produce();
delete pSingleCoreB;
}