一、讲在前面的废话

笔者曾经多次面试都遇到了这个问题,请你说一下软件的设计模式,一般我们都会把23种模式例举几个出来,如果没有说错,你一定会列举单例设计模式,这样的话你就中了面试官的圈套了。接下来的一般情况就是让你细说单例设计模式,然后写代码。

二、单例设计模式概述

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。下面是构建单例设计模式的条件:

  • 是单例模式的类只提供私有的构造函数,
  • 是类定义中含有一个该类的静态私有对象,
  • 是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象

三、单例设计模式的分类

我们都知道,单例设计模式分为懒汉式和饿汉式,而他们两种有涉及到线程是否安全。
下面我们通过代码来分析

懒汉式代码

class A_lazy
{
private:A_lazy(){}
public:static A_lazy* getInstance(){if(s_sgl == NULL){s_sgl = new A_lazy;}return s_sgl; }~A_lazy(){}
private:static A_lazy* s_sgl;
};A_lazy *A_lazy::s_sgl = NULL;

饿汉式的代码

class B_hungry
{
private:B_hungry(){}
public:static B_hungry* getInstance(){return s_ghy;}
private:static B_hungry* s_hgy;
};
//Init初始化
B_hungry *B_hungry::s_hgy = new B_hungry;

四、单例碰到多线程

//懒汉式
class A_lazy
{
private:A_lazy(){}
public:static A_lazy* getInstance(){if(s_sig == NULL){s_sig = new A_lazy;}return s_sig;}
private:static A_lazy* s_sig;
};A_lazy *A_lazy::s_sig = NULL;
//饿汉式
class B_hungry
{
private:B_hungry(){}
public:static B_hungry* getInstance(){return s_ghy;}
private:static B_hungry* s_hgy;
};
//Init初始化
B_hungry *B_hungry::s_hgy = new B_hungry;DWORD WINAPI MyThread_hangry(LPVOID lpThreadParameter)
{B_hungry* bh = B_hungry::getInstance();cout << "单例对象地址" << (int*)chair << endl;return 0;
}//饿汉式单例碰到多线程测试
void thread_A_lazy()
{HANDLE handler[10];for (int i = 0; i < 10;i++){handler[i] = CreateThread(NULL,NULL, MyThread_hangry, NULL, NULL, NULL);}
}DWORD WINAPI MyThread_lazy(LPVOID lpThreadParameter)
{A_lazy* chairman = A_lazy::getInstance();cout << "单例对象地址:" << (int*)chairman << endl;return 0;
}//懒汉式单例碰到多线程
void thread_hgy()
{HANDLE handler[10];for (int i = 0; i < 10; i++){handler[i] = CreateThread(NULL,NULL, MyThread_lazy, NULL, NULL, NULL);}
}

五、单例模式的适用场景

  • 系统只需要一个实例对象,如系统要求提供一个唯一的序列号生成器或资源管理器,或者需要考虑资源消耗太大而只允许创建一个对象。
  • 客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例。

面试官最喜欢考的设计模式---单例设计模式相关推荐

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

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

  2. Java设计模式——单例设计模式/权限修饰符的使用

    1. 单例模式含义 所谓的单例设计模式,就是采取一定的方法保证整个软件系统中,某个类只能存在一个对象实例. 单例设计模式 2. 单例设计模式的两种实现方法 饿汉式:不管是否需要该实例,我事先就把该实例 ...

  3. Java设计模式-单例设计模式

    文章目录 前言 一.什么是设计模式? 二.单例模式介绍 1.单例模式的目的 2.单例模式的定义 单例模式的设计与实现要点: 3.单例模式的两种实现方式 (一)饿汉式创建 (二)懒汉式创建 4.单例模式 ...

  4. 面试官:Spring创建好的单例对象存在线程安全问题吗?

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/jdk_wangtaida/ article/details/88738228 前言 这是我在一次面试中被问到过的问题,但是当时 ...

  5. java设计模式--单例设计模式

    package com.henu; /*饿汉就是类一旦加载,就把单例初始化完成,保证getInstance的时候,单例是已经存在的了.而懒汉比较懒,只有当调用getInstance的时候,才回去初始化 ...

  6. 【秒懂设计模式】单例设计模式

     秒懂设计模式--单例设计模式 (三)单例设计模式 1.先解释一下,什么是单例模式呢? 在Java中是这样定义的:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 显然从 ...

  7. python基础知识整理 第七节:单例设计模式、异常、模块、包、制作模块、文件

    1.单例设计模式 单例设计模式就是为对象在内存中分配空间的时候,永远只会返回一个唯一的固定的内存空间.这样就能保证在内存中这个类的对象只有唯一的一份,这个就叫做单例.(为对象分配空间使用的是内置方法_ ...

  8. 第三次学JAVA再学不好就吃翔(part117)--单例设计模式

    学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 多线程 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内 ...

  9. C++11标准下的单例设计模式

    单例设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 为什么会产生设计模式这样的东西呢? 使用设计模式的目的:为了代码可重用性.让代码 ...

最新文章

  1. ICLR 2022 || 通过邻域/度/初始特征重建的等图自编码器
  2. 杭电 2111 Saving HDU (贪心)
  3. matlab画图(复数的直角坐标和极坐标)(-)
  4. 【译】Attacks against machine learning — an overview
  5. Hbase 二级索引 Solr int字段排序问题 can not sort on multivalued field
  6. Shell通过过滤条件(比如IP)分类流量包,最后合并流量包
  7. 复杂产品的响应式设计【流程篇】
  8. 1的准确率_库存准确率总是100%正常吗?
  9. iis 在站点中新建虚拟目录站点之后,虚拟目录中的 web.config 与 主站点中的 web.config冲突解决方案...
  10. 【工业串口和网络软件通讯平台(SuperIO)教程】二.架构和组成部分
  11. 64位Windows 7平台安装32位Timesten,配置ODBC数据源
  12. git:致命的:无法从远程存储库读取
  13. 汇编学习--7.16--中断
  14. c语言程序设计基础课本答案,c语言程序设计基础课后习题参考 答 案与解析.doc...
  15. java 制作word模板
  16. 安庆集团-冲刺日志(第一天)
  17. ECTouch多语言插件,ECSHOP手机版多语言翻译,ecshop手机端多国语言翻译切换,ECSHOP网站多语言切换
  18. 计算机第一启动设置u盘启动,如何进入bios,设置优盘为电脑第一启动顺序
  19. 重读《从菜鸟到测试架构师》-- 开发团队做的远不仅是开发
  20. 《王者荣耀》发布的绝悟 AI,到底有多强...

热门文章

  1. python四级_Python分析36套四级真题获取词频最高5000个词汇,还怕四级不过么
  2. Zookeeper小解
  3. 图像相关小成果:停车自动计费装置
  4. canvas 模拟地球绕太阳转动 月球绕地球转动
  5. 无需安装的Linux Live CD--第二篇:实战Knoppix
  6. 《虚拟现实在各行业中的应用》(Yanlz+Unity+XR+VR+AR+MR+虚拟现实+5G+云计算+雾计算+AI+人工智能+CRAN+云游戏+IoT物联网+游戏开发+框架编程+立钻哥哥++ok++)
  7. Buu-crypto-write up
  8. 初中信息技术计算机的发展,中小学信息技术教材的现状与发展趋势
  9. 一文搞懂华为ML Kit数字人,超简单集成
  10. 第三章 地势坤,君子以厚德载物 ——《箴言》第一章读书笔记之三