【2014-05-06】C++ 设计模式----单例模式
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++ 设计模式----单例模式的更多相关文章
- ACM会议列表与介绍(2014/05/06)
Conferences ACM SEACM Southeast Regional Conference ACM Southeast Regional Conference the oldest, co ...
- 设计模式 单例模式(Singleton) [ 转载2 ]
设计模式 单例模式(Singleton) [ 转载2 ] @author java_my_life 单例模式的结构 单例模式的特点: 单例类只能有一个实例. 单例类必须自己创建自己的唯一实例. 单例类 ...
- 设计模式 单例模式(Singleton) [ 转载 ]
设计模式 单例模式(Singleton) [ 转载 ] 转载请注明出处:http://cantellow.iteye.com/blog/838473 前言 懒汉:调用时才创建对象 饿汉:类初始化时就创 ...
- c#设计模式-单例模式(面试题)
c#设计模式-单例模式 单例模式三种写法: 第一种最简单,但没有考虑线程安全,在多线程时可能会出问题, public class Singleton { private static Singleto ...
- java设计模式单例模式 ----懒汉式与饿汉式的区别
常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...
- 最简单的设计模式——单例模式的演进和推荐写法(Java 版)
前言 如下是之前总结的 C++ 版的:软件开发常用设计模式—单例模式总结(c++版),对比发现 Java 实现的单例模式和 C++ 的在线程安全上还是有些区别的. 概念不多说,没意思,我自己总结就是: ...
- ES6教程-字符串,函数的参数,了解函数的arguments对象,js面向对象,设计模式-单例模式,解构赋值
前言 主要讲解了ES6对字符串的拓展,包括includes,startsWith和endsWith,另外增加了字符串模板. Start includes()是否包含 startsWith()以什么开头 ...
- Java设计模式の单例模式
-------------------------------------------------- 目录 1.定义 2.常见的集中单例实现 a.饿汉式,线程安全 但效率比较低 b.单例模式的实现:饱 ...
- 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 ...
- java设计模式——单例模式(一)
一. 定义与类型 定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 二. 适用场景 想确保任何情况下都绝对只用一个实例 三. 优缺点 优点: 在内存里只有一个实例,减少了内存开销 可以 ...
随机推荐
- setTimeout调用带参数的函数的方法
function test(s){ alert(s);}window.setTimeout(function(){test('str');},1000);这样就可以了...为什么是这样呢.因为s ...
- Go并发控制之sync.WaitGroup
WaitGroup 会将main goroutine阻塞直到所有的goroutine运行结束,从而达到并发控制的目的.使用方法非常简单,真心佩服创造Golang的大师们! type WaitGroup ...
- TCP/IP、Http、Socket的区别
1.标准网络层次 网络由下往上分为:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置: 7 应用层 例如HTTP. ...
- querystring 解析url 查询字符串
对前端同学来说,经常要碰到一种比较麻烦的情况,那就是url查询字符串的解析问题.说起来也不难,就是比较麻烦. 具体来处理这种情况的时候,相信有一部分同学就是针对具体项目中的需要的字符去正则匹配一下,业 ...
- Add&Delete WindowService
Part One-Add: Step4: Add the new service to windows service: $commandLine = 'D:\IMS\2.16.0.42-DataSe ...
- scp 从远程拷贝文件不需要密码
执行这一句,弹出来要你输入密码,输入一次后,以后再 scp 远程机的文件 再也不需要密码了 ssh-copy-id myusername@8.8.8.8
- Android--自定义加载框
1,在网上看了下好看的加载框,看了一下,挺好看的,再看了下源码,就是纯paint画出来的,再加上属性动画就搞定了 再来看一下我们的源码 LvGhost.java package com.qianmo. ...
- 实测:Windows 8.1 (Windows Blue) 第三方桌面应用无法支持Retina屏,效果与Windows8.0似无差别。
首先我是在VMWARE下装的Windows Blue,是否改用BootCamp直接装就没问题我不知道,理论上应该无差别. 谣言里那个Windows Blue里的缩放功能可以完美支持Retina,但实际 ...
- node 异步编程
node 异步编程 我了解到的node异步编程可分成: 1.回调函数 2.pub/sub模式(发布/订阅模式) 3.promise 4.generator 5.async await 一.直接回调函数 ...
- 简单封装数据请求(iOS)
#import <Foundation/Foundation.h> //给block起 别名 //类型 void(^)(BOOL success , id data) //别名是 Comp ...