当前位置: 首页 > news >正文

设计模式3 创建模式之Singleton模式

参考:1. 《设计模式精解- GoF 23 种设计模式解析附 C++实现源码》作者博客

设计模式3 创建模式之Singleton模式

  • 0 前言
  • 1 模式选择
  • 2 实现代码
  • 3 讨论
  • 总结


0 前言

如何去创建一个唯一的对象?
可以使用全局变量来实现;
当我们遇
到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也正是很多公司在招聘 Java 开发人员时候经常考察 Singleton 模式的缘故吧.

1 模式选择

在这里插入图片描述

一个private的 static 的class * _instance 变量;
一个static 的 instance 方法(接口);

2 实现代码

//singleton.h

#ifndef __SINGLETON_H_
#define __SINGLETON_H_#include <iostream>
using namespace std;class singleton
{
public:static singleton * instance();
protected:singleton();
private:static singleton* _instance;
};#endif //~__SINGLETON_H_

//singleton.cpp

#include "singleton.h"
#include <iostream>using namespace std;singleton* singleton::_instance = 0;singleton::singleton()
{cout << "singleton..." << endl;
}singleton* singleton::instance()
{if(0 == _instance){_instance = new singleton();	}return _instance;
}

//main.cpp

#include "singleton.h"
#include <iostream>
using namespace std;int main(int argc, char* argv[])
{singleton* sgn = singleton::instance();return 0;
}

在这里插入图片描述

Singleton 模式的实现无须补充解释,需要说明的是, Singleton 不可以被实例化,因此我们将其构造函数声明为 protected 或者直接声明为 private

3 讨论

Singleton 模式在开发中经常用到, 且不说我们开发过程中一些变量必须是唯一的,比如说打印机的实例等等。

Singleton 模式经常和 Factory( AbstractFactory) 模式在一起使用, 因为系统中工厂对象一般来说只要一个。

总结

singleton 模式保证类变量是唯一的。

public的static instance 接口;private的 static _instance 变量;protected 或者 private的 construction function 构造函数。

singleton模式 经常与工厂模式一起使用。

http://www.xdnf.cn/news/1450531.html

相关文章:

  • 大数据工程师认证推荐项目:基于Spark+Django的学生创业分析可视化系统技术价值解析
  • 基于 EasyExcel + 线程池 解决 POI 导出时的内存溢出与超时问题
  • 如何简单理解状态机、流程图和时序图
  • Docker学习记录
  • 记一次 Nuxt 3 + pnpm Monorepo 中的依赖地狱:`@unhead/vue` 引发的致命错误
  • 封边机高级设置密码解锁指南:技术解析与安全操作建议
  • k8s基础(未完待续)
  • doubletrouble: 1靶场渗透
  • ubuntu-24.04.3-live-server连接不上xhell
  • 当数据库宕机时,PostgreSQL 高可用在背后做了什么?
  • 探索 PostgreSQL 和 MySQL 之间的主要差异和相似之处,找到满足您项目需求的最佳数据库解决方案。
  • jQuery的$.Ajax方法分析
  • 低代码高效搭建应用,轻松应对多场景需求
  • 低代码选型避坑指南:告别封闭与绑定,星图云开发者平台定义开放灵活新标准
  • 3D 房地产地图 Web 应用
  • 从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
  • 渐变背景色和渐变字体颜色的实现方法
  • GPT-5冷酷操盘,游戏狼人杀一战封神!七大LLM狂飙演技,人类玩家看完沉默
  • 学习日记-SpringMVC-day49-9.4
  • 卫星通信+地面网络融合 Sivers半导体毫米波技术打通智慧交通最后一公里
  • DevOps平台选型指南:破解研发效率瓶颈,适配金融/政务/国产化场景的5大关键指标
  • E-E-A-T与现代SEO:赢得搜索引擎信任的完整策略
  • 高效办公新选择:艾克斯音频转文本工具——免费本地化AI识别神器
  • 第15章 Jenkins最佳实践
  • GitHub每日最火火火项目(9.4)
  • 在树莓派集群上部署 Distributed Llama (Qwen 3 14B) 详细指南
  • “乾坤大挪移”:耐达讯自动化RS485转Profinet解锁HMI新乾坤
  • 当Python遇见高德:基于PyQt与JS API构建桌面三维地形图应用实战
  • leetcode算法刷题的第二十六天
  • 软考中级习题与解答——第二章_程序语言与语言处理程序(2)