C++设计模式:Singleton的模板实现之一

原创 2003年01月02日 09:22:00

题目:C++设计模式:Singleton的模板实现之一
类型:原创

作者:古斌亮
时间:2002.12.25
EMail : KingLinux@163.com

 在http://www.csdn.net/ 和天极网 看了两篇关于设计模式:Singleton的C++实现的文章,
自觉的学到不少东西(:)),在这里我也写了一个C++模板的实现之一,望各位大虾多多指教,也希望可以达到抛砖引玉的作用.

 关于的Singleton的原理可以参考天极网《C++设计模式之Singleton》或http://www.csdn.net/中的《Singleton模式的C++实现研究》或是书本《设计模式》,这里就不说了,请多包涵!

 翠花,上代码!

/////////////////////////////////
//singleton template file
//SingleEx.h

#ifndef SINGLETONEX__H__
#define SINGLETONEX__H__

//File Name : SingletonEx.h
//作用      : 提供单件模板功能(singleton template)
//Copyright(C) C++
//Microsoft Visual C++ 6.0 , GCC Ver2.95.3-6 编译通过
//作者:古斌亮
//时间:2002.12.25
//EMail : KingLinux@163.com

template<class T>
class CSingletonBase
{
protected:
 inline static T* Create(void)
 {
  if(m_pt==NULL)
  {
   m_pt=new T();
  }
  return m_pt;
 }

 inline static void Free(void)
 {
  delete m_pt;
  m_pt=NULL;
 }

protected:
 CSingletonBase()
 {
 }

 virtual ~CSingletonBase()
 {
  delete m_pt;
 }

private:
 CSingletonBase(const CSingletonBase& sig)
 {
 }

 CSingletonBase& operator = (const CSingletonBase& sig)
 {
 }

private:
 static T * m_pt;
};

template<class T>
T* CSingletonBase<T>::m_pt = NULL;

template<class T>
class CSingletonEx : private CSingletonBase<T>
{
public:
 CSingletonEx()
 {
 }

 virtual ~CSingletonEx()
 {  
 }

public:
 virtual T* Instance(void)
 {
  return CSingletonBase<T>::Create();
 }

 virtual void Release(void)
 {
  CSingletonBase<T>::Free();
 }

private:
 CSingletonEx(const CSingletonEx& sig)
 {
 }

 CSingletonEx& operator = (const CSingletonEx& sig)
 {
 }
};

#endif //SINGLETONEX__H__


////////////////////////////////
//测试类
//Doc.h

#ifndef CDOC__H__
#define CDOC__H__

class CDoc //测试类
{
public:
 CDoc(const std::string name = "NoName"):m_name(name){}
 virtual ~CDoc(){}

public:
 inline
 std::string Name()
 {
  return m_name;
 }

 inline
 void SetName(const std::string& name)
 {
  m_name=name;
 }

protected:
 std::string  m_name;
};

#endif //CDOC__H__

////////////////////////////////////
//测试文件
//main.cpp

#include<iostream>
#include<string>
#include "singletonex.h"
#include "doc.h"

void TestSingletonEx(void)
{
 CSingletonEx<CDoc> s;

 CDoc *pdoc = s.Instance();

 std::cout<<pdoc->Name()<<std::endl;

 pdoc->SetName("pdoc change:  My SingletonEx");

 CDoc *p2 = s.Instance();

 std::cout<<p2->Name()<<std::endl;

 p2->SetName("p2 change: SingletonEx ");

 std::cout<<pdoc->Name()<<std::endl;
}

void main(void)
{
 std::cout<<"******** Test SingletonEx Start ******** "<<std::endl;
 TestSingletonEx();
}

//the end!!

C++设计模式5--单例模式Singleton--当前对象只有一个实例

很多情况下,我们在开发项目的过程中,都希望自己运行的某个部件只有一个实例, 比如我们天天用QT开发界面,QTCreate里帮助菜单下的关于Qt Create菜单,弹出来的关于对话框,在QTCreate...
  • gatieme
  • gatieme
  • 2014年01月08日 13:25
  • 21467

[Java设计模式](一)怎样实现Singleton(单例)模式编程

单例模式是开发模式中最简单,最易于理解的一种模式。简单地说,它指的就是始终保持一个实例的意思。但是,Java的类是可以穿件多个实例的,那么,怎么实现呢? 顾名思义,单例模式就是只有一个实例。单例模式确...
  • u012942818
  • u012942818
  • 2015年03月30日 15:20
  • 1138

c++11 singleton 类模板实现

使用单例从来没有如此容易和省心过, 传统单实例类模板singleton, 二段式构造单实例模板delayed...
  • xyzzf
  • xyzzf
  • 2014年11月29日 18:38
  • 1858

java设计模式学习系列之一:单例模式(Singleton)

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

单体模式+模板类+智能指针实现CSingleton

定义 单体(Singleton)模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。   理解 1.       Singleton模式用来取代全局静态变量。C++通过静态成员变量来实现...
  • luliyuan
  • luliyuan
  • 2014年04月04日 13:45
  • 3366

一个精妙单例CSingleton的赏析------逐渐抽象为单例CSingleton模板

来看看一个精妙单例: #include using namespace std; class CSingleton { public: static int* getInstance(); }...
  • stpeace
  • stpeace
  • 2017年04月02日 18:23
  • 2634

C++ 中的 Singleton 实现

C++ 中的 Singleton 实现 关键字:ANSI C++, Singleton, static member, initialize, auto_ptr, std, STL , implem...
  • jacklondon
  • jacklondon
  • 2004年07月22日 09:56
  • 3368

设计模式之---单例模式(Singleton Design Pattern)

场景 对象只要利用自己的属性完成了自己的任务.那该对象就是承担了责任。 除了维持了自身的一致性,该对象无需承担其他任何责任。 如果该对象还承担着其他责任,而其他对象又依赖于该特定对象所承担的贵任...
  • u010878994
  • u010878994
  • 2016年04月26日 01:19
  • 584

C++ 线程安全的singleton如何实现

线程安全的C++ 单例饿汉模式template class Singleton { private: Singleton() {} Singleton (co...
  • fall221
  • fall221
  • 2016年02月27日 14:07
  • 1607

设计模式(创建型)之单例模式(Singleton Pattern)

单例模式可能是23种设计模式中最简单的。应用也非常广泛,譬如Android中的数据库访问等操作都可以运用单例模式。核心概念: 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称...
  • yanbober
  • yanbober
  • 2015年04月27日 16:50
  • 2665
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++设计模式:Singleton的模板实现之一
举报原因:
原因补充:

(最多只允许输入30个字)