【2014-05-06】C++ 设计模式----单例模式

本文介绍了单例模式的概念及其在C++中的实现方式,并通过一个具体的类模板进行了详细说明。此外,还探讨了单例模式在LTE系统级仿真中的应用。

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 == 0) {
    _instance = new _T;
    }
    return dynamic_cast<_T*>(_instance);
}

template<class _T>
Singleton<_T>* Singleton<_T>::_instance = 0;

template<class _T>
Singleton<_T>::Singleton() {
    assert(_instance == 0);
    _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 != 0);
     assert(cs1 == cs2);  
}

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

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

 

 

转载于:https://www.cnblogs.com/dumubulin/p/3711134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值