//简单工厂模式
#include<iostream>
using namespace std;
enum CTYPE {COREA,COREB};
class SingleCore
{
public:
virtual void show() = 0;
};
class SingleCoreA : public SingCore
{
public:
void show() {cout << "SingleCore A" << endl;}
};
class SingleCoreB : public SingleCore
{
public:
void show() {cout << "SingleCore B" << endl;}
};
class Factory
{
public:
SingleCore *CreateSingleCore(enum CTYPE ctype)
{
if(ctype == COREA)
return new SingleCoreA();
else if(ctype == COREB)
return new SingleCoreB();
else
return NULL;
}
};
//工厂方法模式
#include<iostream>
using namespace std;
enum CTYPE {COREA,COREB};
class SingleCore
{
public:
virtual void show() = 0;
};
class SingleCoreA : public SingleCore
{
public:
void show() {cout << "SingleCore A" << endl;}
};
class SingleCoreB : public SingleCore
{
public:
void show() {cout << "SingleCore B" << endl;}
};
class Factory()
{
public:
virtual SingleCore* CreateSingleCore() = 0;
};
class FactoryA : public Factory
{
public:
SingleCoreA* CreateSingleCore() {return new SingleCoreA;}
};
class FactoryB : public Factory
{
public:
SingleCoreB* CreateSingleCore() {return new SingleCoreB;}
};
//抽象工厂模式
class SingleCore
{
public:
virtual void Show() = 0;
};
class SingleCoreA : public SingleCore
{
public:
void Show() {cout << "Sing Core A " << endl;}
};
class SingleCoreB : public SingleCore
{
public:
void Show() {cout << "Single Core B " << endl;}
};
class MultiCore
{
public:
virtual void Show() = 0;
};
class MultiCoreA : public MultiCore
{
public:
void Show() {cout << "Multi Core A" << endl;}
};
class MultiCoreB : public MultiCore
{
public:
void Show() {cout << "Multi Core B" << endl;}
};
class CoreFactory
{
public:
virtual SingleCore* CreateSingleCore() = 0;
virtual MultiCore* CreateMultiCore() = 0;
};
class FactoryA : public CoreFactory
{
public:
SingleCore* CreateSingleCore() {return new SingleCoreA();}
MultiCore* CreateMultiCore {return new MultiCoreA();}
};
class FactoryB : public CoreFactory
{
SingleCore* CreateSingCore() {return new SingleCoreB();}
MultiCore* CreateMultiCore() {return new MultiCoreB();}
};