C/C++学习——简单工厂模式

news/2024/6/17 5:09:22 标签: c++

简单工厂模式

  • 一、简单工厂模式
  • 二、C++代码示例
  • 总结


一、简单工厂模式

工厂模式是一种常见的设计模式,它用于创建对象,但将对象的创建过程抽象出来,以便在不暴露对象的具体实现细节的情况下创建不同类型的对象。

二、C++代码示例

#include <iostream>
#include <memory>
/*
简单工厂模式:通过参数控制可以生产任何产品
优点:简单粗暴,直观易懂
缺点:1、所有东西生产在一起,产品太多会导致代码量庞大
      2、开闭原则遵循(开放拓展、关闭修改)的不是太好,要新增产品就必须修改工厂方法
*/


//创建一个抽象基类
class Fruit
{
    public:
        //构建一个纯虚函数
        virtual void name() = 0;
};

//创建一个子类,继承基类
class Apple : public Fruit
{
    public:
        void name() override
        {
            std::cout << "我是一个苹果\n";
        }
};

class Banana : public Fruit
{
    public:
        void name() override
        {
            std::cout << "我是一个香蕉\n";
        }
};

class FruitFactory
{
    public:
        // 静态成员函数,返回值为一个智能指针,函数名为create
        static std::shared_ptr<Fruit> create(const std::string &name)
        {
            if(name == "苹果")
            {
                return std::make_shared<Apple>(); //创建Apple类型的对象
            }
            else
            {
                return std::make_shared<Banana>();
            }
        }
};

int main()
{
    Apple a; //实例化对象
    a.name();

    std::shared_ptr<Fruit> fruit = FruitFactory::create("苹果");
    fruit->name();
    fruit = FruitFactory::create("香蕉");
    fruit->name();
    return 0;
}

总结

简单工厂模式的优缺点:
优点:简单粗暴,直观易懂
缺点:1、所有东西生产在一起,产品太多会导致代码量庞大
2、开闭原则遵循(开放拓展、关闭修改)的不是太好,要新增产品就必须修改工厂方法


http://www.niftyadmin.cn/n/4989548.html

相关文章

WPF工控机textbox获得焦点自动打开软键盘

1.通过nuget安装 osklib.wpf 2.在textbox getFoucs中敲入如下代码即可实现获得焦点弹出软键盘 private void txtPLC_IP_GotFocus(object sender, RoutedEventArgs e){try{// Osklib.OnScreenKeyboard.Close();Osklib.OnScreenKeyboard.Show();}catch (Exception ex){MessageB…

Windows笔记本电脑开机黑屏

Windows笔记本电脑开机黑屏 最近&#xff0c;我遇到了一件奇怪的事情。我的Windows笔记本电脑在开机时出现了一个黑屏&#xff0c;没有任何反应。我尝试了多种方法&#xff0c;包括重启和恢复出厂设置&#xff0c;但都无济于事。 我开始感到担心&#xff0c;因为这只会影响到…

多线程学习笔记

多线程学习笔记 一、概念 线程是一个程序内部的一条执行流程。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。 Java虚拟机允许应用程序同时执行多个执行线程。 每个线…

Java中转换流(InputStreamReader,OutputStreamWriter),打印流(PrintStream,PrintWriter)

转换流 InputStreamReader 和 OutputStreamWriter 是 Java 中用于字符流和字节流之间进行转换的转换流类。它们主要用于解决字符编码的问题&#xff0c;在字节流和字符流之间提供了桥梁&#xff0c;可以将字节流转换为字符流或将字符流转换为字节流。 InputStreamReader&#…

shell语法--数组相关

shell定义一个数组 在 shell 中&#xff0c;可以使用以下语法来定义一个数组&#xff1a; array_name(item1 item2 item3 ...) 其中&#xff0c;array_name 是数组的名称&#xff0c;item1、item2、item3 等是数组中的元素&#xff0c;它们之间用空格分隔。例如&#xff0c;以下…

不会画图也能创作角色动态贴图

标题&#xff1a;不会画图也能创作角色动态贴图&#xff1a;实现关键创作的秘诀 引言&#xff1a; 创作角色动态贴图是一种吸引人的方式&#xff0c;可以在社交媒体平台和聊天软件上展示个性化的表情和动作。然而&#xff0c;并不是每个人都具备绘画技巧&#xff0c;这可能成为…

推荐Java开发常用的工具类库google guava

Guava Guava是一个Google开源的Java核心库&#xff0c;它提供了许多实用的工具和辅助类&#xff0c;使Java开发更加简洁、高效、可靠。目前和hutool一起&#xff0c;是业界常用的工具类库。shigen也比较喜欢使用&#xff0c;在这里列举一下常用的工具类库和使用的案例。 参考…

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示: