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

概念

创建型模式


类图


代码

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;
}
相关推荐
会编程的土豆18 分钟前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
低频电磁之道21 分钟前
解决 Windows C++ DLL 导出类不可见的编译错误
c++·windows
君义_noip2 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s
Ricky_Theseus2 小时前
静态链接与动态链接
c++
澈2072 小时前
双指针,数组去重
c++·算法
小辉同志3 小时前
207. 课程表
c++·算法·力扣·图论
UXbot3 小时前
AI原型设计工具评测:从创意到交互式Demo,5款产品全面解析
前端·ui·设计模式·ai·ai编程·原型模式
feng_you_ying_li3 小时前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
小樱花的樱花4 小时前
打造高效记事本:UI设计到功能实现
开发语言·c++·qt·ui
零二年的冬4 小时前
epoll详解
java·linux·开发语言·c++·链表