C++实现单例模式/工厂模式

news2024/11/13 21:06:13

单例模式

单例模式即一个类只创建一个实例,提供一个全局访问点。单例模式主要是为了控制资源访问,在一些功能如:数据库连接池,日志类实例,线程池等都可以采用单例模式。

// 实现一个单例
#include<iostream>
#include<mutex>
#include<memory>

using namespace std;

class Singleton{
private:
    Singleton(){
        cout<<"Singleton instance create"<<endl;
    }
    
    static mutex mtx;
    static unique_ptr<Singleton> _instance;
    
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
public:
    static Singleton* getInstance() {
        if (_instance == nullptr) {
            lock_guard<mutex> lock(mtx);
            if (_instance == nullptr) {
                _instance.reset(new Singleton);
            }
        }
        return _instance.get();
    }
};

mutex Singleton::mtx;
unique_ptr<Singleton> Singleton::_instance = nullptr;

int main() {
    Singleton* s1 = Singleton::getInstance();
    Singleton* s2 = Singleton::getInstance();
    
    cout<<"s1:"<<s1<<endl;
    cout<<"s2:"<<s2<<endl;

    return 0;
}				

运行结果:
在这里插入图片描述

工厂模式

工厂模式在即使用一个管理类统一地创建一群被管理类,这些被管理类应该有继承的关系。工厂模式主要的作用为解耦对象的创建和使用。打个比方,英雄联盟里每个英雄都有QWER4个技能,那么可以采用工厂模式管理所有的英雄,当要创建新英雄时,只需要在产品类的子类中添加新英雄并实现QWER四个方法,在工厂类中添加新英雄,就可以提供给用户使用了。

// 实现一个工厂模式
#include<iostream>

using namespace std;

class ProductBase{
public:
  virtual void use() = 0;  
  virtual ~ProductBase(){}
};

class Product1 : public ProductBase{
public:
    void use() override {
        cout<<"product1 use"<<endl;   
    }
};

class Product2 : public ProductBase{
public:
    void use() override {
        cout<<"product2 use"<<endl;   
    }
};

class Factory{
public:
    ProductBase* createProduct(int type) {
        switch (type) {
            case 1:
                return new Product1();
                break;
            case 2:
                return new Product2();
                break;
            default:
                cout<<"没这个产品"<<endl;
                break;
        }
        return nullptr;
    }
};

int main() {
    Factory fa;
    ProductBase* p1 = fa.createProduct(1);
    p1->use();
    delete p1;
    ProductBase* p2 = fa.createProduct(2);
    p2->use();
    delete p2;
    return 0;
}

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

户外上网黑科技|续航能力大比拼,飞猫、闪鱼、格行、品胜,哪个好

在当今的移动互联网时代&#xff0c;随身WiFi已成为我们日常生活中不可或缺的一部分&#xff0c;特别是在租房、出差、旅行或户外活动时&#xff0c;其续航能力成为了用户选择的重要因素。本文将针对飞猫、闪鱼、格行、品胜这四款热门随身WiFi产品的续航能力进行详细比较&#…

C#高级:在SQLserver中使用视图、存储过程、索引和触发器

目录 一、视图 1.视图是什么&#xff0c;有什么作用&#xff1f; 2.视图和存储过程有什么区别&#xff1f; 3.建立一个视图&#xff0c;名为PersonBorrowView&#xff0c;SQL已给出&#xff1a; 4.如果往BorrowInfo加一条记录&#xff0c;我原本的SQL会增加一条记录&#…

JAVA毕业设计635—基于Java+ssm的仓库管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于Javassm的仓库管理系统(源代码数据库)635 一、系统介绍 分为员工、管理员两种角色 1、员工&#xff1a; 登录、库存管理、出入库管理、密码修改 2、管理员&#xff1a; 库…

(自用)交互协议设计——protobuf序列化

protobuf是一种比json和xml等序列化工具更加轻量和高效的结构化数据存储格式&#xff0c;性能比json和xml真的强很多&#xff0c;毕竟google出品。 protobuf原理 protobuf如何使用 创建xxx.proto文件 开头写上 syntax"proto2"package tutorial; 表明使用的proto…

Linux:修改网卡名称(redhat-centos-redora)

解决问题: 我现在有块网卡名ens160&#xff0c;我想把他改为ens33&#xff08;仅是模拟&#xff0c;实际中你可以任意更改&#xff0c;不是局限在这两名称中&#xff0c;举一反三&#xff09; 我当前的操作系统为&#xff1a;centos9 解决办法&#xff1a; 1.修改grub配置 …

前端学习笔记-JS篇-02

运算符 赋值运算符 对变量进行赋值的运算符。 已经学过的赋值运算符:【将等号右边的值赋予给左边&#xff0c;要求左边必须是一个容器】 其他赋值运算符: - * / % 原始写法和简化写法【其实就是java基础】 一元运算符 众多的JavaScript 的运…

免费【2024】springboot 个人健康管理网站的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

php 企业员工考勤系统—计算机毕业设计源码17108

摘要 由于数据库和数据仓库技术的快速发展&#xff0c;企业员工考勤系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。员工管理系统对处理对象和服务对象&#xff0c;自身的系统结构&#xff0c;处理能力&#xff0c;都将适应技术发展的要求发生重大的变化。 …

Linux系统安全及应用(二):PAM安全认证

文章目录 4Linux中的PAM安全认证介绍su命令的安全隐患PAM认证原理和构成PAM安全认证流程PAM 配置文件结构说明PAM 控制标记的补充说明PAM 实例 4Linux中的PAM安全认证 介绍 PAM&#xff08;Pluggable Authentication Modules&#xff09;&#xff0c;可插拔式认证模块是一种高…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(七)卡尔曼滤波器三:卡尔曼滤波器公式推导【转载】

卡尔曼滤波器三&#xff1a;卡尔曼公式推导 转载来源&#xff1a;卡尔曼滤波&#xff1a;从入门到精通 简述 考虑一个SLAM 问题&#xff0c;它由一个运动方程&#xff1a; x t f ( x t − 1 , u t ) ω t (1) \mathbf{x}_{t}f(\mathbf{x}_{t-1},\mathbf{u}_{t}) \omega_…

尚品汇-ES(三十一)

目录&#xff1a; &#xff08;1&#xff09;封装搜索相关实体对象 &#xff08;2&#xff09;搜索接口封装 &#xff08;3&#xff09;在service-list-client模块添加远程接口 &#xff08;1&#xff09;封装搜索相关实体对象 搜索参数实体&#xff1a;SearchParam 搜索参…

haproxy高级功能配置

介绍HAProxy高级配置及实用案例 一.基于cookie会话保持 cookie value:为当前server指定cookie值&#xff0c;实现基于cookie的会话黏性&#xff0c;相对于基于 source 地址hash 调度算法对客户端的粒度更精准&#xff0c;但同时也加大了haproxy负载&#xff0c;目前此模式使用…

Service服务在Android中的使用

目录 一&#xff0c;Service简介 二&#xff0c;Service的两种启动方式 1&#xff0c;非绑定式启动Service 2&#xff0c;绑定式启动Service 三&#xff0c;Service的生命周期 1&#xff0c;非绑定式Service的生命周期 2&#xff0c;绑定式Service的生命周期 四&#xf…

BCArchive加密工具实测分享:为何我觉得它很实用?

前言 你是不是经常有这样的烦恼&#xff1a;重要的文件、私密的照片、敏感的资料&#xff0c;总是担心会不小心泄露出去&#xff1f;哎呀&#xff0c;别担心&#xff0c;别担心&#xff0c;我今天要介绍的这款软件&#xff0c;简直就是守护你数据安全的超级英雄&#xff01; 在…

CVE-2012-2122 mysql/mariaDB身份认证漏洞

简介&#xff1a; 当连接MariaDB/MySQL时&#xff0c;输入的密码会与期望的正确密码比较&#xff0c;不断的尝试登录连接&#xff0c;回导致MySQL认为两个密码是相同的。也就是说只要知道用户名&#xff0c;不断尝试就能够直接登入SQL数据库。 影响范围#所有的Mariadb和mysql版…

【吊打面试官系列-Elasticsearch面试题】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

大家好&#xff0c;我是锋哥。今天分享关于 【Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Elasticsearch 在部署时&#xff0c;对 Linux 的设置有哪些优化方法&#xff1f; 1、64 GB 内存…

【STM32】CubeMX + CLion + FreeRTOS移植过程问题记录

文章目录 一、portable 文件选择二、自定义文件添加三、ST-Link v2 烧录问题四、STM32F407工程中程序无法启动调度器 前言   本文依照稚晖君分享的配置CLion用于STM32开发【优雅の嵌入式开发】&#xff0c;尝试配置STM32CubeMX CLion开发环境&#xff0c;并在此基础上移植Fre…

利用Emgucv绘制条形码边框16(C#)

EmguCV环境配置&#xff1a; ​​​​​​Emgu CV4图像处理之环境搭建1(C#)_emgucv 4.7-CSDN博客 本文测试环境&#xff1a; win10 64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备&#xff1a; 1 新增控制台项目&#xff0c;.net framework为4.7.2 2 把win-x…

minikube 实践练习

前言 我这里就简单跟着官方教程做了下练习 参考文档&#xff1a;https://v1-27.docs.kubernetes.io/zh-cn/docs/tutorials/hello-minikube/ 这里最重要的是&#xff0c;你需要提前配置好你的网络。 这个我教不了&#xff0c;之前发了篇帖子vmware实现科学上网审核不通过&…

ElasticSearch 全文检索相关性 算分

文章目录 相关性相关性Relevance相关性算法TF-IDFBM25 通过Explain查看TF-IDFboosting query 多字段查询 相关性dis_max query最佳字段查询multi_match querybest_fields最佳匹配字段most_fields 多数字段搜索cross_fields跨字段搜索 相关性 相关性Relevance 搜索的相关性算分…