1、何为单例模式?

  单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点(static)。可能有人会想这和全局变量有什么区别呢? 通常我们可以让一个全局成员变量使得一个对象被访问,但它不能仿真被多次对象实例化。一个最好的办法是,让类自身负责保存它的唯一实例。这个类要保证没有其他实例可以被创建,并且它可以提供一个访问该实例的公共接口。

在《大话设计模式》一书中,作者将单例模式比作计划生育,一个类只能实例化为一个对象,再形象不过了(P213)。

  下面给出了一段C++编写的Singleton类模板,详情出自http://shinh.skr.jp/template/singleton.html

/*
* File : TemplateSingleton.h
* Author: lqh
*/
#ifndef TEMPLATE_SINGLETON_H_
#define TEMPLATE_SINGLETON_H_ #include <cassert> template<class _T>
class Singleton {
public:
static _T* instance(); //supply the global access point
Singleton(); //prevent multiple instances
virtual ~Singleton(); protected:
static Singleton* _instance;
}; template<class _T>
_T* Singleton<_T>::instance() {
if (_instance == ) {
_instance = new _T;
}
return dynamic_cast<_T*>(_instance);
} template<class _T>
Singleton<_T>* Singleton<_T>::_instance = ; template<class _T>
Singleton<_T>::Singleton() {
assert(_instance == );
_instance = this;
} template<class _T>
Singleton<_T>::~Singleton() {
} #endif /* TEMPLATE_SINGLETON_H_ */

该单例模板类的使用方法如下所示:

/*
* File : singletonTest.cpp
* Author: lqh
*/
Class ConcreteSingleton : Public Singleton<ConcreteSingleton> {};
int main() {
ConcreteSingleton *cs1 = ConcreteSingleton::instance();
ConcreteSingleton *cs2 = ConcreteSingleton::instance();
assert(cs1 != );
assert(cs1 == cs2);
}

2、LTE系统级仿真中单例模式的应用

  • 生成小区、基站、用户等的ID
  • 工厂模式 (还不太明白)
  • 生成随机数类
  • 其他所有只需要一个实例化对象的类,如载波、带宽等等

【2014-05-06】C++ 设计模式----单例模式的更多相关文章

  1. ACM会议列表与介绍(2014/05/06)

    Conferences ACM SEACM Southeast Regional Conference ACM Southeast Regional Conference the oldest, co ...

  2. 设计模式 单例模式(Singleton) [ 转载2 ]

    设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...

  3. 设计模式 单例模式(Singleton) [ 转载 ]

    设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...

  4. c#设计模式-单例模式(面试题)

    c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleto ...

  5. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

  6. 最简单的设计模式——单例模式的演进和推荐写法(Java 版)

    前言 如下是之前总结的 C++ 版的:软件开发常用设计模式—单例模式总结(c++版),对比发现 Java 实现的单例模式和 C++ 的在线程安全上还是有些区别的. 概念不多说,没意思,我自己总结就是: ...

  7. ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值

    前言 主要讲解了ES6对字符串的拓展,包括includes,startsWith和endsWith,另外增加了字符串模板. Start includes()是否包含 startsWith()以什么开头 ...

  8. Java设计模式の单例模式

    -------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...

  9. https://blog.newrelic.com/2014/05/02/25-php-developers-follow-online/

    w https://blog.newrelic.com/2014/05/02/25-php-developers-follow-online/ 1. Rob Allen. Zend Framework ...

  10. java设计模式——单例模式(一)

    一. 定义与类型 定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 二. 适用场景 想确保任何情况下都绝对只用一个实例 三. 优缺点 优点: 在内存里只有一个实例,减少了内存开销 可以 ...

随机推荐

  1. Swift: 比较Swift中闭包传值、OC中的Block传值

    一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...

  2. python_excel

    1. xlrd, xlwt, xlutils的关系 Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Ex ...

  3. Ubuntu下查看机器信息

    原文地址 测试机器的硬件信息 查看CPU信息(看到有8个逻辑CPU, 也知道了CPU型号)   # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq ...

  4. Frameset框架优缺点--来自新浪微博

    原文地址:http://blog.sina.com.cn/s/blog_4a4b1b010100p6ro.html HTML框架简述   一个浏览器窗体可以通过几个页面的组合来显示.我们可以使用框架来 ...

  5. word自定义格式 并下载

    /** * * @param pRun * @param 20 间距 * @param fontSize 字体大小 * @param bold 是否加粗 * @param underLine 是否下划 ...

  6. Java多线程开发系列之三:线程这一辈子(线程的生命周期)

    前文中已经提到了,关于多线程的基础知识和多线程的创建.但是如果想要很好的管理多线程,一定要对线程的生命周期有一个整体概念.本节即对线程的一生进行介绍,让大家对线程的各个时段的状态有一定了解. 线程的一 ...

  7. c#-SimHash匹配相似-算法

    使用场景:Google 的 simhash 算法 //通过大量测试,simhash用于比较大文本,比如500字以上效果都还蛮好,距离小于3的基本都是相似,误判率也比较低. //从我的经验,如果我们假定 ...

  8. jQuery属性操作

    jQuery 的属性操作的核心部分其实就是对底层 getAttribute().setAttributes()等方法的一系列兼容性处理 ...if ( notxml ) { name = name.t ...

  9. 【转】mysql对large page的支持

    昨天同事问我关于大页内存的事,我也只是有个模糊的概念,从别的博客转过来的,先记录下 在 Linux 操作系统上运行内存需求量较大的应用程序时,由于其采用的默认页面大小为 4KB,因而将会产生较多 TL ...

  10. C#:复杂条件判断类型(练习)

    /// <summary> /// 文件类型 /// </summary> public enum FileType { Courseware, //"课件" ...