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

概念

创建型模式


类图


代码

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;
}
相关推荐
C+-C资深大佬6 分钟前
C++多态
java·jvm·c++
今儿敲了吗9 分钟前
11| 子集
c++·笔记·算法
阿猿收手吧!12 分钟前
【C++】无锁原子栈:CAS实现线程安全
开发语言·c++·安全
蒹葭玉树18 分钟前
【C++上岸】C++常见面试题目--操作系统篇(第三十期)
c++·面试·risc-v
wangmengxxw20 分钟前
设计模式 -详解
开发语言·javascript·设计模式
进击的小头25 分钟前
设计模式落地的避坑指南(C语言版)
c语言·开发语言·设计模式
凤年徐25 分钟前
容器适配器深度解析:从STL的stack、queue到优先队列的底层实现
开发语言·c++·算法
超绝振刀怪26 分钟前
【C++ String】
c++·stl
短剑重铸之日26 分钟前
《设计模式》第五篇:策略模式
java·后端·设计模式·策略模式
小程同学>o<29 分钟前
嵌入式之C/C++(四)预处理
c语言·c++·面试题库·嵌入式面试题