工厂模式以此只能传递一种工厂(虽说可以改接口),若模块中需要多个对象,则需要传递多个工厂,可以把关联的几个工厂抽象合并为一个工厂。
class Gpu
{
public:
virtual void work() = 0;
virtual ~Gpu(){}
};
class Gpu_Intel :public Gpu
{
public:
virtual void work() {
cout << "Gpu_Intel working" << endl;
}
};
class Gpu_Amd :public Gpu
{
public:
virtual void work() {
cout << "Gpu_Amd working" << endl;
}
};
class Cpu
{
public:
virtual void work() = 0;
virtual ~Cpu() {}
};
class Cpu_Intel :public Cpu
{
public:
virtual void work() {
cout << "Cpu_Intel working" << endl;
}
};
class Cpu_Amd :public Cpu
{
public:
virtual void work() {
cout << "Cpu_Amd working" << endl;
}
};
class component_Factory//cpu工厂和gup工厂合并为配件工厂
{
public:
virtual ~component_Factory(){}
virtual Cpu* Cpu_creat() = 0;
virtual Gpu* Gpu_creat() = 0;
};
class Amd_Factory:public component_Factory
{//amd的cpu和gpu配套使用,可以合并到一个创建工厂中
public:
virtual Cpu* Cpu_creat() {
return new Cpu_Amd;
}
virtual Gpu* Gpu_creat() {
return new Gpu_Amd;
}
};
class Intel_Factory :public component_Factory
{//Intel的cpu和gpu配套使用,可以合并到一个创建工厂中
public:
virtual Cpu* Cpu_creat() {
return new Cpu_Intel;
}
virtual Gpu* Gpu_creat() {
return new Gpu_Intel;
}
};
void test03() {
auto my_laptop = [](component_Factory* factory) {
Cpu* cup = factory->Cpu_creat();
Gpu* gup = factory->Gpu_creat();
cup->work();
gup->work();
delete cup;
delete gup;
};
Intel_Factory i;
my_laptop(&i);
Amd_Factory a;
my_laptop(&a);
}