← 返回博客列表

模式特点

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂是工厂方法的升级,用于创建产品族。

类图

类图

应用场景

示例代码(C++)

// 抽象产品族
class Button { public: virtual void render() = 0; virtual ~Button() = default; };
class Input { public: virtual void render() = 0; virtual ~Input() = default; };

// Windows 产品族
class WinButton : public Button { public: void render() override { std::cout << "[Windows Button]" << std::endl; } };
class WinInput : public Input { public: void render() override { std::cout << "[Windows Input]" << std::endl; } };

// Mac 产品族
class MacButton : public Button { public: void render() override { std::cout << "[Mac Button]" << std::endl; } };
class MacInput : public Input { public: void render() override { std::cout << "[Mac Input]" << std::endl; } };

// 抽象工厂
class GUIFactory {
public:
    virtual Button* createButton() = 0;
    virtual Input* createInput() = 0;
    virtual ~GUIFactory() = default;
};

class WindowsFactory : public GUIFactory {
public:
    Button* createButton() override { return new WinButton(); }
    Input* createInput() override { return new WinInput(); }
};