云计算百科
云计算领域专业知识百科平台

创建型模式——抽象工厂模式

抽象工厂设计模式适用于以下情况:
• 一个系统要独立于它的产品的创建、组合和表示;
• 一个系统要由多个产品系列中的一个来配置;
• 要强调一系列相关的产品对象的设计以便进行联合使用;
• 提供一个产品类库,但只想显示它们的接口而不是实现;

下面是一个抽象工厂模式的示例程序:

#include <iostream>
#include <memory>
#include <string>

// ==========================================
// 1. ABSTRACT PRODUCTS (Interfaces)
// ==========================================
class Button {
public:
virtual ~Button() = default;
virtual void paint() const = 0;
};

class Checkbox {
public:
virtual ~Checkbox() = default;
virtual void render() const = 0;
};

// ==========================================
// 2. CONCRETE PRODUCTS (Windows Variant)
// ==========================================
class WindowsButton : public Button {
public:
void paint() const override {
std::cout << "Rendering a Windows-style button.\\n";
}
};

class WindowsCheckbox : public Checkbox {
public:
void render() const override {
std::cout << "Rendering a Windows-style checkbox.\\n";
}
};

// ==========================================
// 3. CONCRETE PRODUCTS (Mac Variant)
// ==========================================
class MacButton : public Button {
public:
void paint() const override {
std::cout << "Rendering a Mac-style button.\\n";
}
};

class MacCheckbox : public Checkbox {
public:
void render() const override {
std::cout << "Rendering a Mac-style checkbox.\\n";
}
};

// ==========================================
// 4. ABSTRACT FACTORY
// ==========================================
class GUIFactory {
public:
virtual ~GUIFactory() = default;
virtual std::unique_ptr<Button> createButton() const = 0;
virtual std::unique_ptr<Checkbox> createCheckbox() const = 0;
};

// ==========================================
// 5. CONCRETE FACTORIES
// ==========================================
class WindowsFactory : public GUIFactory {
public:
std::unique_ptr<Button> createButton() const override {
return std::make_unique<WindowsButton>();
}
std::unique_ptr<Checkbox> createCheckbox() const override {
return std::make_unique<WindowsCheckbox>();
}
};

class MacFactory : public GUIFactory {
public:
std::unique_ptr<Button> createButton() const override {
return std::make_unique<MacButton>();
}
std::unique_ptr<Checkbox> createCheckbox() const override {
return std::make_unique<MacCheckbox>();
}
};

// ==========================================
// 6. CLIENT CODE
// ==========================================
// The client only interacts with the abstract factory and product interfaces.
void renderApplicationUI(const GUIFactory& factory) {
auto button = factory.createButton();
auto checkbox = factory.createCheckbox();

button->paint();
checkbox->render();
}

int main() {
std::cout << "— Initializing Windows Application —\\n";
WindowsFactory winFactory;
renderApplicationUI(winFactory);

std::cout << "\\n— Initializing Mac Application —\\n";
MacFactory macFactory;
renderApplicationUI(macFactory);

return 0;
}

程序运行结果如下:

$ g++ -o main main.cpp
$ ./main
— Initializing Windows Application —
Rendering a Windows-style button.
Rendering a Windows-style checkbox.

— Initializing Mac Application —
Rendering a Mac-style button.
Rendering a Mac-style checkbox.

赞(0)
未经允许不得转载:网硕互联帮助中心 » 创建型模式——抽象工厂模式
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!