Singleton单例模式

Singleton 是对全局变量的取代策略
作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点。

仅有一个实例:通过类的静态成员变量来体现。
提供访问它的全局访问点:访问静态成员变量的静态成员函数来体现。

《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。

单例模式通过类本身来管理其唯一实例,这种特性提供了解决问题的方法。唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一实例的指针。

单例类Singleton有以下特征:

它有一个指向唯一实例的静态指针,并且是私有的;

它有一个公有的函数,可以获取这个唯一的实例,并且在需要的时候创建该实例;

它的构造函数是私有的,这样就不能从别处创建该类的实例。

UML图:

在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量_instance来记录这个唯一的对象实例。通过提供一个staitc的接口Instance来获得这个唯一的实例。

代码如下:

Singleton.h

 1 #ifndef _SINGLETON_H_
 2 #define _SINGLETON_H_
 3
 4 class Singleton
 5 {
 6 private:
 7     static Singleton* pInstance;//静态成员,保存对象的唯一实例
 8     Singleton();//私有化构造函数,使其无法在类外实例化
 9 public:
10     static Singleton* Instance();
11     //void Destroy();
12     static void Destroy();
13 };
14
15 #endif

Singleton.cpp

 1 #include "Singleton.h"
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 Singleton* Singleton::pInstance = NULL;
 7
 8 Singleton::Singleton()
 9 {
10     cout<< "Singleton..." << endl;
11 }
12
13 Singleton* Singleton::Instance()
14 {
15     if(NULL == pInstance)
16     {
17         pInstance = new Singleton();
18     }
19     return pInstance;
20 }
21
22 void Singleton::Destroy()
23 {
24     delete pInstance;
25     pInstance = NULL;
26     cout<< "Destroy..." << endl;
27 }

main.cpp

 1 #include "Singleton.h"
 2 #include <iostream>
 3
 4 using namespace std;
 5
 6 int main()
 7 {
 8     Singleton* ps = Singleton::Instance();//通过全局访问点获取实例
 9     Singleton::Destroy();
10     return 0;
11 }

Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。

C++设计模式-Singleton相关推荐

  1. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  2. socket可以写成单例嘛_精读设计模式 Singleton 单例模式

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  3. 单例设计模式singleton

    简单引入 单例设计模式作为最简单,最常用的设计模式.一般是这两中写法,这两种写法教科书所谓的标准写法,但是实际上存在不少问题.后面介绍标准写法,以规避这些问题. 1.懒汉式: /*** 问题在于,当多 ...

  4. 设计模式-Singleton

    2019独角兽企业重金招聘Python工程师标准>>> Singleton算是知道的设计模式中最简单的最方便实现的了,模式实现了对于类提供唯一实例的方法,在很多系统中都会用到此模式. ...

  5. 创建设计模式 - Singleton设计模式(最佳实践与示例)

    Java Singleton设计模式最佳实践与示例 Java Singleton Pattern是四种帮派设计模式之一,属于创建设计模式类别.从定义来看,它似乎是一个非常简单的设计模式,但是当涉及到实 ...

  6. php实现单例模式类singletonv,php设计模式 singleton (单例模式)

    25种php设计模式,你全都知道吗?下面用代码介绍单例模式(singleton模式)<?php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ cl ...

  7. [设计模式] - Singleton单例模式

    一.介绍 单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点. 在下面的情况下可以使用Singleton模式: 1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时: 2.当这 ...

  8. C++设计模式 - Singleton

    Singleton单例模式 Singleton 是对全局变量的取代策略 作用:保证一个类只能有一个实例,并提供一个全局唯一的访问点. 仅有一个实例:通过类的静态成员变量来体现. 提供访问它的全局访问点 ...

  9. Java设计模式—单例设计模式(Singleton Pattern)完全解析

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...

最新文章

  1. 最新+经典+论文+代码+多版本+神器+https://paperswithcode.com/
  2. AlphaGo制胜绝招:蒙特卡洛树搜索入门指南
  3. 生产者消费者问题——C++ windows版 多生产者多消费者的队列实现
  4. java用集合类求数组交并集_java 并集 数组/集合 有重复元素需 保留(急)
  5. Python入门100题 | 第074题
  6. 大剑无锋之Kafka的Patition的作用【面试推荐】
  7. 1005 继续(3n+1)猜想 (25分)
  8. mysql 查询判断手机号
  9. drupal7 代码生成用户,并自动登录
  10. USART串口驱动SIM800L或者ESP8266
  11. 深度学习领域专有名词的理解与释义
  12. Vue+高德地图API的使用(点击地图搜索周边信息)
  13. 普通最小二乘法的推导证明
  14. 解密街头立体画的创作过程
  15. EndNote X7使用笔记
  16. jsliang 小旅途:广东-001-珠海长隆
  17. Javascript的undefined和notdefined的区别
  18. 哈密顿系统_Matlab
  19. 周鸿祎:无线互联网的垄断形势将更严峻
  20. Element-ui中Cascader级联选择props配置项

热门文章

  1. 打破双亲委派机制有什么用_被打破的双亲委托机制
  2. linux ora27040,AnyBackup-Oracle 异机恢复任务失败,执行输出提示 ORA-00344、ORA-27040 错误...
  3. 被引10万次:21世纪高被引论文Top 10
  4. 解决PD17虚拟机安装时出现 “操作失败 执行该操作失败”的方法
  5. GEOLayers3 for Mac - 世界地图任意位置路径展示ae动画
  6. python中多重if语句用法_Python多分支if语句的使用
  7. 1.7 编程基础之字符串 32 行程长度编码 python
  8. NOIP2002复赛 普及组 第1题
  9. python后端和爬虫_10分钟教你Python爬虫(上)-- HTML和爬虫基础
  10. js获取精确宽度/高度(带小数位像素)