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

单例模式要点:

单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数(构造函数放在private关键字下),二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

在下面的对象图中,有一个"单例对象",而"客户甲"、"客户乙" 和"客户丙"是单例对象的三个客户对象。可以看到,所有的客户对象共享一个单例对象。而且从单例对象到自身的连接线可以看出,单例对象持有对自己的引用。

单例模式应用场景:

一些资源管理器常常设计成单例模式。

在计算机系统中,需要管理的资源包括软件外部资源,譬如每台计算机可以有若干个打印机,但只能有一个Printer Spooler, 以避免两个打印作业同时输出到打印机中。每台计算机可以有若干传真卡,但是只应该有一个软件负责管理传真卡,以避免出现两份传真作业同时传到传真卡中的情况。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。

需要管理的资源包括软件内部资源,譬如,大多数的软件都有一个(甚至多个)属性(properties)文件存放系统配置。这样的系统应当由一个对象来管理一个属性文件。

需要管理的软件内部资源也包括譬如负责记录网站来访人数的部件,记录软件系统内部事件、出错信息的部件,或是对系统的表现进行检查的部件等。这些部件都必须集中管理,不可整出多头。

这些资源管理器构件必须只有一个实例,这是其一;它们必须自行初始化,这是其二;允许整个系统访问自己这是其三。因此,它们都满足单例模式的条件,是单例模式的应用。

单例模式的实现:

class A{

public:

static A& getInstance { return a; }

memberFunction() {...}

private:

A();

A( const A& rhs);

static A a;

};

使用时:  A;;getInstance().memberFunction();  其中A::getInstance()得到的是对象a。

注意:该段代码有个缺点,就是无论是否用到 class A与否,都会生成一个静态的a。为了解决这个问题,可以将static A a;放到getInstance()函数中。即,这样。

class A{

static A& getInstance();

memberFunction() {.....};

private:

A();

A(const A& rhs);

...........................

}

static A &  A::getInstance()

{

static A a;

return a;

}

单例模式应用场景及实现(By C++)相关推荐

  1. 用C#举例单例模式应用场景有哪些

    单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点. 以下是一些常见的单例模式应用场景: 系统配置:在应用程序中,有时需要访问一些全局配置,比如数据库连接字符串等.使用单例模 ...

  2. 单例模式应用场景_三、单例模式详解

    4.单例模式详解 4.1.课程目标 1.掌握单例模式的应用场景. 2.掌握IDEA环境下的多线程调试方式. 3.掌握保证线程安全的单例模式策略. 4.掌握反射暴力攻击单例解决方案及原理分析. 5.序列 ...

  3. 单例模式应用场景_【简易设计模式04】单例模式

    总第56篇 在上篇中,我们对整个系统的设计应遵循的六大设计原则进行了系统性的梳理和讲解.在开发过程中,我们应尽量按照这些设计原则去做,当然也不能生搬硬套,要适当权衡,根据自己的项目情况.项目场景去考量 ...

  4. 单例模式应用场景_面试:请你谈谈单例模式的优缺点,注意事项,使用场景

    单例模式介绍: 单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个全局对象,这样有利于我们协 ...

  5. php使用单例的场景,php单例模式 使用场景和使用方法

    一个类只有一个对象实例 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用.相关 ...

  6. 单例模式的理解?单例模式如何实现?单例模式应用场景

    说说你对单例模式的理解?如何实现? 一.是什么 单例模式(Singleton Pattern):创建型模式,提供了一种创建对象的最佳方式,这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只 ...

  7. Android单例模式应用场景

    SQLITE数据库的使用是Android单例模式典型的应用场景. 单例模式好处: 将对象写成static,避免内存频繁实例化,因此对象在静态内存区只有一份.直接使用getInstance()取得对象. ...

  8. 设计模式之单例模式应用场景篇

    应用场景 我们为什么要使用单例模式呢?它有什么好处? (一)单例模式可以让我们只创建一个对象从而避免了频繁创建对象导致的内存消耗和垃圾回收. Servlet是单例模式,我们只需要创建一个Servlet ...

  9. 单例模式php应用场景,php单例模式 使用场景和使用方法

    一个类只有一个对象实例 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2 ...

最新文章

  1. 从Varchar转换为 datetime
  2. HtmlUnit爬取页面列表链接
  3. 【HDU -1568】 Fibonacci(斐波那契通项公式+取对数)
  4. Android Studio Tips -- 提取方法
  5. mysql 总分区表限制_MySQL分区表的局限和限制详解
  6. pta 7-5 病毒变种 C语言
  7. springboot整合
  8. 游戏服务器架构,配置
  9. 美团2017校园招聘编程题
  10. 面试当中必考的数据结构---树种类大全和相关优秀博客总结
  11. QtXlsx第三方库在Mac OS和Windows下的配置及简单使用
  12. 《音乐达人秀:Adobe Audition实战200例》——实例6 麦克风说话和音乐播放等所有声音都混合录制...
  13. [MATLAB] 读取ASII文件中的复数数据
  14. 力扣 2303. 计算应缴税款总额
  15. GIT | GIT命令大全
  16. 【职场】关于公司各职位的英文缩写!
  17. 不装wine,你的.NET程序照样可以在Linux上运行!
  18. 通过高德地图API获得某条道路上的所有坐标用于描绘道路
  19. HUB75E 点阵屏的使用
  20. WireShark基本使用(1)第一章WireShark简介+练习题

热门文章

  1. 从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址
  2. 微信小程序红包开发注意事项
  3. 桌面录屏推流(ffmpeg/gstreamer+ZLMediaKit推流rtmp/rtsp)
  4. [20170411]bbed删除记录的恢复.txt
  5. 猪齿鱼数智化开发管理平台 1.3.0-alpha发布,欢迎立即体验
  6. 分布式调度框架Elastic-Job
  7. 【SpringBoot应用篇】SpringBoot集成j2cache二级缓存框架
  8. ad9516-4时钟芯片配置注意事项
  9. 压力串级控制装置用于气动马达的高精度调节
  10. 热门光学软件之初体验网络课程系列大纲8