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

概念

创建型模式


类图


代码

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;
}
相关推荐
郝学胜-神的一滴1 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6731 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874752 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春2 小时前
C++之继承的方式
c++·private·public·protected·继承方式
BD_Marathon2 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon2 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy2 小时前
设计模式总结
设计模式
智者知已应修善业3 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法
Trouvaille ~3 小时前
【Linux】应用层协议设计实战(一):自定义协议与网络计算器
linux·运维·服务器·网络·c++·http·应用层协议
CSCN新手听安3 小时前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll