抽象工厂提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。它主要解决产品族和产品等级的问题,例如产品族(即生产厂家)有美的和海尔,产品等级有空调和冰箱,那么所有的产品就有:美的空调、美的冰箱、海尔空调、海尔冰箱这四种。抽象工厂首先实例化产品族,然后再实例化产品等级。
#include <iostream>
using namespace std;
//-------------产品等级:空调--------------
class AirConditioner
{
public:
virtual void message() = 0;
};
class MediaAirConditioner : public AirConditioner
{
void message() override { cout << "美的空调" << endl; }
};
class HaierAirConditioner : public AirConditioner
{
void message() override { cout << "海尔空调" << endl; }
};
//-------------产品等级:冰箱--------------
class Fridge
{
public:
virtual void message() = 0;
};
class MediaFridge : public Fridge
{
void message() override { cout << "美的冰箱" << endl; }
};
class HaierFridge : public Fridge
{
void message() override { cout << "海尔冰箱" << endl; }
};
//抽象工厂
class AbstractFactory
{
public:
virtual AirConditioner* createAirConditioner() = 0;
virtual Fridge* createFridge() = 0;
};
//产品族:美的工厂
class MediaFactory : public AbstractFactory
{
AirConditioner* createAirConditioner() override
{
return new MediaAirConditioner;
}
Fridge* createFridge() override
{
return new MediaFridge;
}
};
//产品族:海尔工厂
class HaierFactory : public AbstractFactory
{
AirConditioner* createAirConditioner() override
{
return new HaierAirConditioner;
}
Fridge* createFridge() override
{
return new HaierFridge;
}
};
int main()
{
AbstractFactory* fac = new MediaFactory; //先指定产品族
Fridge* frg = fac->createFridge(); //再指定产品等级
frg->message();
return 0;
}
UML类图: