一、工厂模式
二、简单工厂

示例代码
#include <iostream>
using namespace std;
enum CpuType
{
CoreA, CoreB, CoreC
};
class Cpu
{
public:
virtual void work() = 0;
};
class SingleCoreA : public Cpu
{
public:
void work()
{
cout << "SingleCoreA work()" << endl;
}
};
class SingleCoreB : public Cpu
{
public:
void work()
{
cout << "SingleCoreB work()" << endl;
}
};
class Factory
{
public:
Cpu * createCpu(enum CpuType type)
{
if (type == CoreA) return new SingleCoreA;
else if (type == CoreB) return new SingleCoreB;
}
};
int main()
{
Factory fac;
Cpu *pCpu = fac.createCpu(CoreA);
pCpu->work();
pCpu = fac.createCpu(CoreB);
pCpu->work();
return 0;
}
三、复杂工厂

#include <iostream>
using namespace std;
enum CpuType
{
CoreA, CoreB, CoreC
};
class Cpu
{
public:
virtual void work() = 0;
};
class SingleCoreA : public Cpu
{
public:
void work()
{
cout << "SingleCoreA work()" << endl;
}
};
class SingleCoreB : public Cpu
{
public:
void work()
{
cout << "SingleCoreB work()" << endl;
}
};
class Factory
{
public:
virtual Cpu* createCpu() = 0;
};
class FactoryA : public Factory
{
public:
Cpu* createCpu()
{
return new SingleCoreA;
}
};
class FactoryB : public Factory
{
public:
Cpu* createCpu()
{
return new SingleCoreB;
}
};
int main()
{
FactoryA fa;
Cpu* pCpu = fa.createCpu();
pCpu->work();
FactoryB fb;
pCpu = fb.createCpu();
pCpu->work();
return 0;
}
网友评论