设计模式(2)--对象创建(5)--单件

1. 意图

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

2. 一种角色

    单件(Singleton)

3. 优点

    3.1 对唯一实例的受控访问

    3.2 缩小名空间(对全局变量的改进)

    3.3 允许对操作和表示精化(可以有子类)

    3.4 允许可变数目的实例

    3.5 比类操作更灵活

4. 缺点

    N/A 

5. 相关模式

    很多模式都可以用单例实现,如抽象工厂、生成器、原型。

6. 代码示意(C++)
#pragma once
#include <string>
#include <iostream>

using namespace std;

class Singleton
{
private:
	string m_data;
private:
	Singleton() { m_data = "hello"; }
	static Singleton* s_singleton;

public:
	static Singleton* Instance() {
		if (s_singleton == 0) {
			s_singleton = new Singleton();
		}
		return s_singleton;
	}
	void ShowData()
	{
		cout << "data is:" <<m_data<< endl;
	}
};

cpp:

#include "Singleton.h"

Singleton* Singleton::s_singleton = 0;
#include "Singleton.h"
int main() {

	Singleton* pSingleton = Singleton::Instance();
	pSingleton->ShowData();

	delete pSingleton;
	return 0;
}

 运行结果:

 6.1 注意此代码未考虑线程安全问题

 6.2 将构造函数私有化,只能通过Instance函数访问对象 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ReenterLock重入锁

synchronized就是一种最简单的控制方法&#xff0c;它决定了一个线程释放可以访问临界区资源。 同时&#xff0c;Object.wait()方法和Object.notify()方法起到了线程等待和通知的作用。 ReenterLock重入锁可以完全替代关键字Synchoronized.重入锁是Synchoronized、Object.wait(…

reactive数据不响应

我们知道&#xff0c;reactive函数用于创建对象等复杂数据的响应式代理对象&#xff0c;当该对象的属性发生变化时&#xff0c;会自动触发视图更新。 但在Vue 3中&#xff0c;当我们使用reactive创建的对象或数组进行赋值时&#xff0c;尽管能够完成正常的赋值操作&#xff0c…

RK3568平台(网络篇)添加网络交换芯片RTL8306M

一.硬件原理图 分析&#xff1a; 该交换芯片支持I2C、SPI、mdio通信&#xff0c;但是看ast1520的uboot代码采用的是mdio去通信phy芯片的&#xff0c;所以暂时也先采用mdio的方式&#xff0c;需要配置相应的引脚才可以配置成mdio通信模式&#xff0c;具体的配置硬件工程师解决。…

HarmonyOS开发实战:如何实现一个运动排名榜页面

HarmonyOS开发实战&#xff1a;如何实现一个运动排名榜页面 代码仓库&#xff1a; 运动排名榜页面 项目介绍 本项目使用声明式语法和组件化基础知识&#xff0c;搭建一个可刷新的排行榜页面。在排行榜页面中&#xff0c;使用循环渲染控制语法来实现列表数据渲染&#xff0c;…

linux添加环境变量

一、查看当前环境变量 echo $PATH 二、将工作空间添加到环境变量&#xff0c;vim是编辑器&#xff0c;可以换成别的编辑器&#xff0c;vim编辑器的使用法可以百度一下 vim ~/.bashrc编辑器添加&#xff1a; source ~/scan_ws/devel/setup.bash

os功能模板

【 一 】简介 os 就是 “operating system” 的缩写&#xff0c;顾名思义&#xff0c;os 模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方面页可以极大增强代码的可移植性。如果该…

深入理解JVM虚拟机第三十二篇:详解JVM当中本地方法栈

😉😉 欢迎加入我们的学习交流群呀! ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring等等很多应用和源码级别的高质量视频和笔记资料,你想学的我们这里都有! 🥭🥭3:QQ群:583783824 📚📚 工作VX:BigTreeJava 拉你…

Python框架篇(5):FastApi-中间件使用

1.介绍 1.1 官网介绍 "中间件"是一个函数,它在每个请求被特定的路径操作处理之前,以及在每个响应返回之前工作. 它接收你的应用程序的每一个 请求. 然后它可以对这个 请求做一些事情或者执行任何需要的代码. 然后它将 请求传递给应用程序的其他部分 (通过某种 路径操…

全球汽车行业的数字化转型:产品和后端的渐进之旅

如何管理汽车行业的数字化转型?在我们本篇文章中了解更多有关如何设定长期目标的信息。 正在改变汽车行业的26个数字化主题 最近一篇关于汽车行业数字化转型的论文确定了26个数字技术主题&#xff08;论文详情请点击阅读原文&#xff09;&#xff0c;分为三个主要集群: 1)驾驶…

添加E1000网卡进行测试,只有VMXNET3性能的四分之一

正文共&#xff1a;1444 字 14 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们前面介绍了VMware ESXi 6.7中的适配器类型性能&#xff08;VMWare ESXi中&#xff0c;不同的虚拟网卡性能竟然能相差三倍&#xff01;&#xff09;&#xff0c;当时的配置项主要为E1000e和VMXN…

【LangChain学习之旅】—(3) LangChain快速构建本地知识库的智能问答系统

【LangChain学习之旅】—&#xff08;3&#xff09; LangChain快速构建本地知识库的智能问答系统 项目及实现框架开发框架核心实现机制数据准备及加载加载文本文本的分割向量数据库存储文本的“嵌入”概念向量数据库概念 相关信息获取RetrievalQA生成回答并展示示例小结 Refere…

MathBuddyGUI:MATLAB多功能计算器,2060行代码

是我做的一个MATLAB课设&#xff0c;是一个带画图、输出模式转换、简单控制系统仿真等功能的计算器。练习GUI编程用。 仓库链接&#xff1a; MathBuddyGUI: MATLAB课设&#xff0c;一个带画图、输出模式转换、简单控制系统仿真等功能的计算器&#xff0c;练习GUI编程用。 (gi…

C++——C++11(1)

时至今日&#xff0c;C标准已经到了C23&#xff0c;但是你要说哪一次提出的标准最经 典&#xff0c;那C11一定会被人提及&#xff0c;C11带来了数量可观的变化&#xff0c;其中包 含了约140个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;这使得 C11更像是从…

在用 App 设计工具创建的 App 内共享数据

目录 定义属性 访问属性 示例 共享绘图数据和下拉列表选择 使用属性是在 App 内共享数据的最佳方法&#xff0c;因为属性可供 App 内的所有函数和回调访问。所有 UI 组件都是属性&#xff0c;因此可以使用以下语法来访问和更新回调中的 UI 组件&#xff1a; app.Component…

Java 第12章 异常 本章作业

1 编程 两数相除的异常处理 各自属于哪些异常&#xff1a; 数据格式不正确 NumberformatException 缺少命令行参数 ArrayIndexOutOfBoundsException 除0异常处理 ArithmeticException ArrayIndexOutOfBoundsException 为数组下标越界时会抛出的异常&#xff0c;可以在检测到命…

计算机网络知识点

计算机网络中的OSI模型 OSI模型是指“国际标准化组织(SO)”提出的使各种计算机在世界范围内互通互联的网络标准框架简称开放系统互联参考模型 (OSI)。 七层模型&#xff1a;应用层、表示层、会话层、传输层、网络层&#xff08;IP协议、RARP协议、ARP协议、CIDR协议&#xff0…

0x31 质数

0x31 质数 定义&#xff1a; 若一个正整数无法被除了1和它自身之外的任何自然数整除&#xff0c;则称该数为质数&#xff08;或素数&#xff09;&#xff0c;否则则称该正整数为合数。 在整个自然数集合中&#xff0c;质数的数量不多&#xff0c;分布比较稀疏&#xff0c;对…

机器学习项目精选 第一期:超完整数据科学资料合集

大噶吼&#xff0c;不说废话&#xff0c;分享一波我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、超完整数据科学资料合集 地址&#xff1a;https://github.com/krishnaik06/The-Grand-Complete-Data-Science-Materials Pytho…

strlen的三种模拟实现方法

首先&#xff0c;我们要了解strlen函数的参数以及返回值&#xff0c;还有使用方法。 1. 计数器方法 #include <stdio.h>size_t my_strlen(const char* str) {int count 0;while (*str) {count;}return count; } int main() {char arr[] "abcdef";int len …

专科论文降重修改技巧 神码ai

大家好&#xff0c;今天来聊聊专科论文降重修改技巧&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 专科论文降重修改技巧 在专科论文的撰写过程中&#xff0c;查重率是一…