概念
使用工厂的客户根本不知道具体的类.工厂的使用者创建一个基类的对象.但由子类决定实例化哪个.这就允许我们服从子类的实例化,但是调用都不知道哪个对象被创建.
类图

图片来自源: wiki
代码示例
#include <iostream>
class Button {
public:
virtual void paint() = 0;
};
class OSXButton: public Button {
public:
void paint() {
std::cout << "OSX button \n";
}
};
class WindowsButton: public Button {
public:
void paint() {
std::cout << "Windows button \n";
}
};
class GUIFactory {
public:
virtual Button *createButton(char *) = 0;
};
class Factory: public GUIFactory {
public:
Button *createButton(char *type) {
if(strcmp(type,"Windows") == 0) {
return new WindowsButton;
}
else if(strcmp(type,"OSX") == 0) {
return new OSXButton;
}
}
};
int main()
{
GUIFactory* guiFactory;
Button *btn;
guiFactory = new Factory;
btn = guiFactory->createButton("OSX");
btn -> paint();
btn = guiFactory->createButton("Windows");
btn -> paint();
return 0;
}