Single Patterns : 就一个单例模式调得我蛋疼,1. 单例类的继承树即扩展 2. 系统中单例类的注册及查询,属实有意思!

news2024/11/28 11:50:23

Intent

Ensure a class only has one instance, and provide a global point of access to it.
在这里插入图片描述

// DesignPatterns.cpp: 定义应用程序的入口点。
//

#include "DesignPatterns.h"

#include <list>
#include <utility>
using namespace std;

class Singleton {
public:
	static Singleton* Instance() {
		if (instance_ == nullptr)
			return new Singleton();
		return instance_;
	}
	virtual void SingletonOperation() {
		std::cout << __FUNCTION__ << std::endl;
	}
	virtual void GetSingletonData() {
		std::cout << __FUNCTION__ << std::endl;
		// TODO. process singletonData
	}
protected:
	Singleton() {
	}
	static Singleton* instance_;
};

Singleton* Singleton::instance_ = 0;

class NameSingletonPair {
public:
	NameSingletonPair() {
	}
	NameSingletonPair(const char* n, Singleton* s) :name_(n), singleton_(s) {
	}
	std::string name() const{
		return std::string(name_);
	}
	Singleton* singleton() const{
		return singleton_;
	}
private:
	const char* name_;
	Singleton* singleton_;
};

class SingletonCollection : public Singleton{
public:
	SingletonCollection() {
		std::list<NameSingletonPair > li{};
		registry_ = &li;
	}

	static void Register(const char* name, Singleton* s) {
		std::cout << __FUNCTION__ << std::endl;
		if (registry_ == nullptr)
			return;
	/*	auto sinle = NameSingletonPair(name, s);
		registry_->push_back(sinle);*/
	}

	static Singleton* Instance() {
		std::cout << __FUNCTION__ << std::endl;
		const char* singletonName = getenv("SINGLETON");
		// user or envirnment supplies this at startup
		auto instance_ = Lookup(singletonName);
		// lookup returns 0 if there's no such singleton
		return instance_;
	}
protected:
	static Singleton* Lookup(const char* name) {
		std::cout << __FUNCTION__ << std::endl;
		//for (auto item : (*registry_)) {
		//	if (std::string(item.name()).compare(std::string(name)) == 0)
		//	{
		//		return item.singleton();
		//	}
		//}
		return nullptr;
	}
private:
	static std::list<NameSingletonPair >* registry_;
};

class MySingleton : public Singleton {
public:
	static Singleton* Instance() {
		if (instance_ == 0) {
			instance_ = new MySingleton();
		}
		return instance_;
	}
	virtual void SingletonOperation() {
		std::cout << __FUNCTION__ << std::endl;
	}
	virtual void GetSingletonData() {
		std::cout << __FUNCTION__ << std::endl;
		// TODO. process singletonData
	}
private:
	MySingleton() {
		SingletonCollection::Register("MySingleton", this);
	}
private:
	void* singletonData;
};

int main()
{
	cout << "Hello CMake." << endl;

	MySingleton::Instance()->SingletonOperation();
	MySingleton::Instance()->GetSingletonData();

	SingletonCollection::Instance();

	return 0;
}


在这里插入图片描述

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

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

相关文章

计算机视觉面试题-03

1、简单介绍一下sigmoid&#xff0c;relu&#xff0c;softplus&#xff0c;tanh&#xff0c;RBF及其应用场景 这里简单介绍几个激活函数及其应用场景&#xff1a; Sigmoid 函数&#xff08;Logistic 函数&#xff09;&#xff1a; 公式&#xff1a; s i g m a ( x ) 1 1 e …

2.7V 到 5.5V、 12Bit 单通道数模转换器MS5221/5221M

产品简述 MS5221/5221M 是一款 12bit 单通道输出的电压型 DAC &#xff0c;接口 采用三线串口模式&#xff0c;可以兼容 TMS320 、 SPI 、 QSPI 和 Microwire 串 口。 MS5221/5221M 数据有 16bit &#xff0c;包括控制字节&#xff0c;和 12bitDAC 数 据。 MS5221/5221M 电…

CloudCompare 二次开发1

一、在源码中添加插件文件 修改cmakelist 二、插件文件内容 MyPlugin 1、修改程序名称 2、 修改cMakeList 3、 修改cpp和.h 4、修改qc 5、修改json 三、重新编译 cmake 插件 如果不打√那个生成的程序里面没有这个插件显示 generate 然后生成 结果 四、结果显示 dll …

SAS Planet软件介绍与使用教程

软件情况 SAS Planet是一位俄罗斯爱好者创建的的开源应用&#xff0c;该应用可以浏览与下载主流网络地图&#xff0c;包括Google地图、Google地球、Bing地图、Esri 地图、Yandex地图等。 该软件是基于Pascal开发的应用&#xff0c;目前已在github上开源&#xff0c;并使用了GP…

统计学之假设检验

- 原假设和备择假设&#xff1a; - 第一类错误&#xff08;α错误&#xff09;&#xff1a;H0以真为假 *重点关注 第二类错误&#xff08;β错误&#xff09;&#xff1a;H0以假为真 - 假设检验流程&#xff1a; 提出H0和H1&#xff1b;计算检验统计量Z&#xff1…

运维01:云计算

云计算的类型 分类&#xff1a;公有云、私有云、混合云 云计算的服务模式 服务模式分3种&#xff1a; ①IaaS&#xff08;Infrastructure as a Service&#xff09;&#xff1a;基础设施即服务 ②PaaS&#xff08;Platform as a Service&#xff09;&#xff1a;平台即服务…

数据结构——利用堆进行对数组的排序

今天文章的内容是关于我们如何利用堆的特性对我们的数组进行排序&#xff0c;还有就是我们的TopK的问题&#xff0c;这次我们放在的是文件种&#xff0c;我们放入一亿个数字&#xff0c;然后我们取出一亿个数字中最大的十个数&#xff0c;利用上章堆的问题进行解决。 首先就是我…

函数指针数组指针数组传参的本质字符指针

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;不服输的你&#xff0c;他们拿什么赢 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请点赞…

​ 云计算的尽头是轻量应用服务器?带你了解亚马逊Lightsail的卓越优势

很多小伙伴可能都在好奇&#xff0c;轻量应用服务器有什么特点&#xff1f;为什么相较于普通的云服务器&#xff0c;很多用户现在都更青睐于轻量应用服务器?这个“轻”就是它独特的优势所在。轻量应用服务器以其“开箱即用、应用优质、轻松上手、投入划算、运维便捷和稳定可靠…

最近得了一场病 差点要了我的命

最近得了一场病&#xff0c;前后持续了有十多天&#xff0c;时至今日感觉脑袋还是昏昏沉沉的不在状态&#xff0c;感觉像是药吃的&#xff0c;毕竟连着吃了十多天西药&#xff0c;可能人也吃傻了吧&#xff0c;中间还挂了五天水&#xff0c;算是补充了能量。 起因是和老婆去吃…

【Shell】Shell基础学习

一、shell脚本 (1)第一个shell脚本 #!/bin/bash #this is a comment echo "hello world"一个shell脚本永远以“#!”开头,这是一个脚本开始的标记,它是告诉系统执行这个文件需要用某个解释器,后面的/bin/bash就是指明解释器的具体位置。 “#”开头是注释 …

MBA-历年数学题

xx题 甲从1&#xff0c;2&#xff0c;3中抽取一数&#xff0c;记为α;乙从1&#xff0c;2&#xff0c;3&#xff0c;4中抽取一数&#xff0c;记为b规定当a>b或a1<b时甲获胜&#xff0c;则甲获胜的概率为&#xff1f; 倍数题 若实数a&#xff0c;b&#xff0c;c满足a∶b…

2024黑龙江省职业院校技能大赛暨国赛选拔赛“GZ034软件测试”赛项规程

2024黑龙江省职业院校技能大赛暨国赛选拔赛 “GZ034软件测试”赛项规程 一、赛项信息 赛项类别 每年赛 隔年赛&#xff08;单数年/双数年&#xff09; 赛项组别 中等职业教育 高等职业教育 学生赛&#xff08;个人/团体&#xff09; 教师赛 师生同赛 涉及专业大类、…

前缀和——1314. 矩阵区域和

文章目录 &#x1f3a4;1. 题目&#x1f3a4;2. 算法原理&#x1f3a4;3. 代码实现 &#x1f3a4;1. 题目 题目链接&#xff1a;1314. 矩阵区域和 - 力扣&#xff08;LeetCode&#xff09; 给你一个 m x n 的矩阵 mat 和一个整数 k &#xff0c;请你返回一个矩阵 answer &#…

easyExcel 注解开发 快速以及简单上手 以及包含工具类

easyExcel 简单快速使用 1. mevan 这里版本我这里选的是 poi 4.1.2和 ali的easyexcel 的 3.3.1。 因为阿里easy是根据poi的依赖开发的有关系&#xff0c;两者需要对应要不然就会有很多bug和错误在运行时发生。需要版本对应&#xff0c;然而就是easy的代码也会有bug这个版本是比…

【06】ES6:数组的扩展

一、扩展运算符 扩展运算符&#xff08;spread&#xff09;是三个点&#xff08;…&#xff09;。它是 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列。 1、基本语法 [...array] // array表示要转换的数组console.log(...[1, 2, 3]) // 1 2 3 console.l…

1233:单词倒置(C语言)

题目描述 最近birdfly收到了女友的几份信件&#xff0c;为了只要他俩知道信件的秘密&#xff0c;女友把信件里的每个单词都倒置了。这样只有birdfly将它们倒置过来才能明白女友的心思了。为此birdfly还特意请你编写程序帮他解决一下这个问题。 简单起见假定每封信只包含英文单词…

PC行内编辑

点击编辑&#xff0c;行内编辑输入框出现&#xff0c;给列表的每条数据定义编辑标记&#xff0c;最后一定记得 v-model双向绑定&#xff0c;使数据回显。 步骤&#xff1a; 1、给行数据定义编辑标记 2、点击行编辑标记&#xff08;isedit&#xff09; 3、插槽根据标记渲染表单 …

【ZYNQ】SD 卡读写及文件扫描实验

SD 卡控制器&#xff08;SD/SDIO Controller&#xff09; ZYNQ 中的 SD 卡控制器符合 SD2.0 协议规范&#xff0c;接口兼容 eMMC、MMC3.31、SDIO2.0、SD2.0、SPI&#xff0c;支持 SDHC、SDHS 器件。SD 卡控制器支持 SDMA&#xff08;单操作 DMA&#xff09;、ADMA1&#xff08…

【腾讯云云上实验室】用向量数据库——实现高效文本检索功能

文章目录 前言Tencent Cloud VectorDB 简介Tencent Cloud VectorDB 使用实战申请腾讯云向量数据库腾讯云向量数据库使用步骤腾讯云向量数据库实现文本检索 结论和建议 前言 想必各位开发者一定使用过关系型数据库MySQL去存储我们的项目的数据&#xff0c;也有部分人使用过非关…