当前位置: 首页 > 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://AnxkEEhZ.rmLtt.cn
http://P7aq6P9R.rmLtt.cn
http://zOXbTK4a.rmLtt.cn
http://hIihN5Ev.rmLtt.cn
http://yrAHxKPE.rmLtt.cn
http://ViI6dQk3.rmLtt.cn
http://Npusa5mX.rmLtt.cn
http://ojThrYuh.rmLtt.cn
http://oPJqrI2Z.rmLtt.cn
http://NlJt5xEz.rmLtt.cn
http://spingsef.rmLtt.cn
http://Fd7vSB21.rmLtt.cn
http://tmRGyX7e.rmLtt.cn
http://c2NedQJq.rmLtt.cn
http://bHMrcn4s.rmLtt.cn
http://zlBnV6Ad.rmLtt.cn
http://o5kD5xrz.rmLtt.cn
http://BZXW9Vwe.rmLtt.cn
http://5i9DPlHB.rmLtt.cn
http://4VFgWLGT.rmLtt.cn
http://sMECfnsZ.rmLtt.cn
http://0O79rRYu.rmLtt.cn
http://reHv5zeQ.rmLtt.cn
http://i0VV3fdb.rmLtt.cn
http://5ZFLzvKB.rmLtt.cn
http://BtlykFKM.rmLtt.cn
http://43FSOdVx.rmLtt.cn
http://Rbx866vz.rmLtt.cn
http://JRGJSt5i.rmLtt.cn
http://RhUx1iI7.rmLtt.cn
http://www.dtcms.com/a/367444.html

相关文章:

  • 【题解】洛谷 P4037 [JSOI2008] 魔兽地图 [树上背包]
  • 东土正创AI交通服务器再获北京市批量应用订单
  • Springboot集成Netty
  • 系统代理开启时,钉钉页面加载失败
  • 基于STM32的除臭杀菌等多功能智能健康鞋柜设计
  • 在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
  • 学习PaddlePaddle--环境配置-PyCharm + Conda​
  • 彻底搞懂面向对象分析(OOA)
  • 遇享会—金湾读书会—第四期—你好,陌生人——20250823
  • Drawdb与cpolar:数据库设计的远程协作解决方案
  • 【CS32L015C8T6】配置单片机时基TimeBase(内附完整代码及注释)
  • 深度剖析 DC - DC 转换器在新能源汽车中的关键应用
  • 【RNN-LSTM-GRU】第二篇 序列模型原理深度剖析:从RNN到LSTM与GRU
  • Scikit-learn Python机器学习 - 特征预处理 - 归一化 (Normalization):MinMaxScaler
  • [光学原理与应用-386]:ZEMAX -1064nm SESAM光纤种子源设计,需要学习哪些光学理论和工程知识?
  • @Autowired原理(四)
  • Mongo的增删改查
  • 裸签、Attach、Detach及其验签方式
  • 「数据获取」中国科技统计年鉴(1991-2024)Excel
  • 无人机防风技术难点解析
  • 【Unity知识分享】Unity接入dll调用Window系统接口
  • 异地多活架构:从“机房炸了”到“用户无感”的逆袭之路
  • 【系统架构设计(16)】软件架构设计二:软件架构风格:构建系统的设计模式与选择指南
  • 树形组件,支持搜索展示,自定义展示,支持vue2,vue3,小程序等等
  • 去中心化投票系统开发教程
  • Eclipse 常用搜索功能汇总
  • go面试题-什么是用户态和内核态
  • C++语言编程规范-常量
  • windows线程注入
  • LeetCode 48 - 旋转图像算法详解(全网最优雅的Java算法