首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 常见设计模式的解析和实现(五)-Singleton模式
【标  题】:常见设计模式的解析和实现(五)-Singleton模式
【关键字】:-Singleton
【来  源】:http://www.cppblog.com/converse/archive/2006/07/21/10309.html

常见设计模式的解析和实现(五)-Singleton模式

C++博客 - 创系的技术博客 - 常见设计模式的解析和实现(五)-Singleton模式
有勇气来改变可以改变的事情,有胸怀来接受不可改变的事情,有智慧来分辨两者的不同。
作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

解析:
Singleton模式其实是对全局静态变量的一个取代策略,上面提到的Singleton模式的两个作用在C++中是通过如下的机制实现的:1)仅有一个实例,提供一个类的静态成员变量,大家知道类的静态成员变量对于一个类的所有对象而言是惟一的 2)提供一个访问它的全局访问点,也就是提供对应的访问这个静态成员变量的静态成员函数,对类的所有对象而言也是惟一的.在C++中,可以直接使用类域进行访问而不必初始化一个类的对象.
下面的实现其实是Singleton的一个简单实现,并不是特别的通用,一般的,如果一个项目中需要使用到Singleton模式比较多的话,那么一般会实现一个Singleton的模板类,模板类的模板参数是需要采用Singleton模式的类,比如这样实现:
template<typename?T>
class?Singleton
{
//.类的声明
}
;

//?需要采用singleton模式的类
class?Test
???:?
public?Singleton<Test>
{
//?类的声明
}
;

但是,下面的实现还是采用最简单的实现办法,起的是演示的作用

实现:
1)Singleton.h
/********************************************************************
????created:????2006/07/20
????filename:?????Singleton.h
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Singleton模式的演示代码
********************************************************************
*/


#ifndef?SINGLETON_H
#define?SINGLETON_H

class?Singleton
{
public:
????Singleton()
{};
????
~Singleton(){};

????
//?静态成员函数,提供全局访问的接口
????static?Singleton*?GetInstancePtr();
????
static?Singleton??GetInstance();

????
void?Test();

private:
????
//?静态成员变量,提供全局惟一的一个实例
????static?Singleton*?m_pStatic;
}
;

#endif

2)Singleton.cpp
/********************************************************************
????created:????2006/07/20
????filename:?????Singleton.cpp
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Singleton模式的演示代码
********************************************************************
*/


#include?
"Singleton.h"
#include?
<iostream>

//?类的静态成员变量要在类体外进行定义
Singleton*?Singleton::m_pStatic?=?NULL;

Singleton
*?Singleton::GetInstancePtr()
{
????
if?(NULL?==?m_pStatic)
????
{
????????m_pStatic?
=?new?Singleton();
????}


????
return?m_pStatic;
}


Singleton?Singleton::GetInstance()
{
????
return?*GetInstancePtr();
}


void?Singleton::Test()
{
????std::cout?
<<?"Test!\n";
}

3)Main.cpp
/********************************************************************
????created:????2006/07/20
????filename:?????Main.cpp
????author:????????李创
????????????????
http://www.cppblog.com/converse/

????purpose:????Singleton模式的测试代码
********************************************************************
*/


#include?
"Singleton.h"
#include?
<stdlib.h>

int?main()
{
????
//?不用初始化类对象就可以访问了
????Singleton::GetInstancePtr()->Test();
????Singleton::GetInstance().Test();

????system(
"pause");

????
return?0;
}
posted on 2006-07-21 14:27 创系 阅读(35) 评论(0)  编辑 收藏 收藏至365Key 所属分类: 设计模式
【相关文章】
  • 设计范式笔记-Singleton
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.