【设计模式】工厂方法模式

概念

创建型模式


类图


代码

cpp 复制代码
#include <iostream>

using namespace std;

class Button {
public:
    virtual ~Button()= default;
    virtual string Render() const = 0;
    virtual string OnClick() const = 0;
};

class WindowsButton : public Button {
public:
    string Render() const override {
        return "Windows Render\n";
    }

    string OnClick() const override {
        return "Windows OnClick\n";
    }
};

class HTMLButton : public Button {
public:
    string Render() const override {
        return "HTML Render\n";
    }

    string OnClick() const override {
        return "HTML OnClick\n";
    }
};

class Dialog {
public:
    virtual ~Dialog() = default;
    virtual Button* CreateButton() const = 0;

    string Render() const {
        Button* button = this->CreateButton();
        return (button->OnClick() + button->Render());
    }
};

class WindowsDialog : public Dialog {
public:
    Button* CreateButton() const override {
        return new WindowsButton();
    }
};

class WebDialog : public Dialog {
public:
    Button* CreateButton() const override {
        return new HTMLButton();
    }
};

int main(int argc, char* argv[]) {
    string config = "Web";
    Dialog* dialog;

    if (config == "Windows") {
        dialog = new WindowsDialog();
    } else if (config == "Web") {
        dialog = new WebDialog();
    } else {
        cout << "Error! Unknown Operating System Type!" << endl;
        return -1;
    }

    cout << dialog->Render();

    delete dialog;

    return 0;
}
相关推荐
悠仁さん9 小时前
【C++】set map 使用
java·前端·c++
艾莉丝努力练剑9 小时前
【AI大模型接入SDK】ChatServer问题修复
c++·学习·ai·大模型·sdk
扶尔魔ocy10 小时前
【QT C++】常用设计模式
c++·设计模式
晚风予卿云月10 小时前
【C++高并发内存池】 2.ThreadCache设计
开发语言·c++·高并发内存池·tcmalloc
東隅已逝,桑榆非晚11 小时前
红黑树:从概念到实现
数据结构·c++·笔记·学习
她说..11 小时前
常见设计模式-观察者模式
java·spring boot·spring·观察者模式·设计模式
艾莉丝努力练剑11 小时前
【AI大模型接入SDK】ChatServer接口测试
网络·c++·人工智能·学习·ai·大模型·sdk
D e re k ZH11 小时前
C++ 模板与泛型编程进阶(No 2)
开发语言·c++
青少儿编程课堂12 小时前
蓝桥杯青少组图形化+信息素养+电子学会Scratch考级:校园口算闯关解析
c++·python·算法·bfs·信息学竞赛
eggwyw12 小时前
C++深入浅出探索数据结构的原理
开发语言·c++