工厂模式,用于解决对象的构造问题,即new的执行者
常见的有:
简单工厂:单个工厂,多种产品,拓展时对工厂类进行修改;需要知道产品类型
工厂方法:多个工厂,每个工厂生产一种产品,需要知道那个工厂
抽象工厂:多个工厂,每个工厂可生产不同的产品,
如下,即抽象工厂
// 产品1
class Cpu
{
public:
virtual void startWork() = 0;
};
class AMD_Cpu:public Cpu{
void startWork() override;
};
class Inter_Cpu:public Cpu{
void startWork() override;
};
// 产品2
class Gpu
{
public:
virtual void startWork() = 0;
};
class AMD_Gpu:public Gpu{
void startWork() override;
};
class Inter_Gpu:public Gpu{
void startWork() override;
};
// 工厂
class Factory
{
public:
virtual Cpu *createCpu() = 0;
virtual Gpu *createGpu() = 0;
};
class AMD_Factory:public Factory{
Cpu *createCpu() override;
Gpu *createGpu() override;
};
class Inter_Factory:public Factory{
Cpu *createCpu() override;
Gpu *createGpu() override;
};
void AMD_Cpu::startWork()
{
qDebug() << "amd_cpu_work";
}
void Inter_Cpu::startWork()
{
qDebug() << "inter_cpu_work";
}
void AMD_Gpu::startWork()
{
qDebug() << "amd_gpu_work";
}
void Inter_Gpu::startWork()
{
qDebug() << "inter_gpu_work";
}
Cpu *AMD_Factory::createCpu()
{
return new AMD_Cpu;
}
Gpu *AMD_Factory::createGpu()
{
return new AMD_Gpu;
}
Cpu *Inter_Factory::createCpu()
{
return new Inter_Cpu;
}
Gpu *Inter_Factory::createGpu()
{
return new Inter_Gpu;
}
Factory *pFac = new AMD_Factory;
Cpu *pCpu = pFac->createCpu();
pCpu->startWork();
pFac = new Inter_Factory;
Gpu *pGpu = pFac->createGpu();
pGpu->startWork();