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. Python开发【前端】:HTML

    HTML HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言(标记).相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏 ...

  2. 【尝新】微信小程序初体验

    文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...

  3. RDIFramework.NET框架SOA解决方案(集Windows服务、WinForm形式与IIS形式发布)-分布式应用

    RDIFramework.NET框架SOA解决方案(集Windows服务.WinForm形式与IIS形式发布)-分布式应用 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架 ...

  4. LUA table学习笔记

    function printT( ... ) for i,v in ipairs(...) do print(i,v) end end t1={} t2={} t3={} table.insert(t ...

  5. ActiveMQ 复杂类型的发布与订阅

    很久没po文章了,但是看到.Net里关于ActiveMQ发送复杂类型的文章确实太少了,所以贴出来和大家分享 发布: //消息发布 public class Publisher { private IC ...

  6. iOS设置cell选中时文字颜色的变化

    cell.titleStr.highlightedTextColor = EMCGreenColor;

  7. hibernate的映射类型

    hibernate的映射类型 hibernate MySQL映射类型 1.Hibernate的映射类型 hibernate mysql映射类型 Hibernate 映射类型 Java 类型 标准 SQ ...

  8. 16.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?

    require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行 require include->include有返回值,而require没 ...

  9. CentOS配置本地光盘yum源

    在实际使用linux的过程中,会经常出现安装的发行版有的软件包没有安装的情况,这时,就需要用户从如下两种操作中做出选择:1.手动安装rpm包.2.用yum命令安装软件包. 选择1手动安装的时候经常会遇 ...

  10. html5,表单的综合案例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...