Abstract Factory模式,提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
Abstract Factory模式与Factory模式的区别是:Factory模式有一个抽象产品类,Abstract Factory模式有多个;Factory模式的具体工厂类创建一个具体产品,而Abstract Factory模式的具体工厂类可以创建多个。Abstract Factory模式相对于Factory模式,最大的优点是易于切换产品系列。比如,对于下面的代码示例,如果想从罗技设备切换为微软设备,只需要修改具体工厂为MicrosoftDevicesFactory,如果DevicesFactory生产很多种设备,方便显而易见。
// product
class Mouse {
public:
virtual void Input();
}
class MicrosoftMouse : public Mouse {
public:
void Input();
}
class LogitechMouse : public Mouse {
public:
void Input();
}
class Keyboard {
public:
virtual void Input();
}
class MicrosoftKeyboard : public Keyboard {
public:
void Input();
}
class LogitechKeyboard : public Keyboard {
public:
void Input();
}
// factory
class DevicesFactory {
public:
virtual Mouse* CreateMouse();
virtual Keyboard* CreateKeyboard();
};
class MicrosoftDevicesFactory {
public:
virtual MicrosoftMouse* CreateMouse();
virtual MicrosoftKeyboard* CreateKeyboard();
};
class LogitechDevicesFactory {
public:
virtual LogitechMouse* CreateMouse();
virtual LogitechKeyboard* CreateKeyboard();
};
// test
void Test() {
DevicesFactory* logitechFactory = new LogitechDevicesFactory();
Keyboard* keyboard = logitechFactory->CreateKeyboard();
keyboard->Input();
}