#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 IMultiCore
{
public:
virtual ~IMultiCore() { }
virtual void Produce() = 0;
};
class CMultiCoreA : public IMultiCore
{
public:
virtual ~CMultiCoreA() { }
virtual void Produce() { cout<<"Multi Core A"<<endl; }
};
class CMultiCoreB : public IMultiCore
{
public:
virtual ~CMultiCoreB() { }
virtual void Produce() { cout<<"Multi Core B"<<endl; }
};
//
struct IFactory
{
public:
virtual ~IFactory() { }
virtual ISingleCore* CreateSingleCore() = 0;
virtual IMultiCore* CreateMultiCore() = 0;
};
class CFactoryA : public IFactory
{
public:
virtual ~CFactoryA() { }
virtual ISingleCore* CreateSingleCore() { return new CSingleCoreA(); }
virtual IMultiCore* CreateMultiCore() { return new CMultiCoreA(); }
};
class CFactoryB : public IFactory
{
public:
virtual ~CFactoryB() { }
virtual ISingleCore* CreateSingleCore() { return new CSingleCoreB(); }
virtual IMultiCore* CreateMultiCore() { return new CMultiCoreB(); }
};
//
void main()
{
//
CFactoryA factoryA;
ISingleCore *pSingleCoreA = factoryA.CreateSingleCore();
pSingleCoreA->Produce();
delete pSingleCoreA;
IMultiCore *pMultiCoreA = factoryA.CreateMultiCore();
pMultiCoreA->Produce();
delete pMultiCoreA;
//
CFactoryB factoryB;
ISingleCore *pSingleCoreB = factoryB.CreateSingleCore();
pSingleCoreB->Produce();
delete pSingleCoreB;
IMultiCore *pMultiCoreB = factoryB.CreateMultiCore();
pMultiCoreB->Produce();
delete pMultiCoreB;
}
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别