zoukankan      html  css  js  c++  java
  • 设计模式──Singleton(单例模式)

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

  • 相关阅读:
    Windows Azure Cloud Service (14) 使用Windows Azure诊断收集日志记录数据
    Windows Azure Cloud Service (13) 用Visual Studio 2010 将应用程序部署到Windows Azure平台
    Windows Azure Cloud Service (15) 多个VM Instance场景下如何处理ASP.NET Session
    Windows Azure Storage (5) Windows Azure Drive
    Windows Azure Storage (7) 使用工具管理Windows Azure Storage
    SQL Azure(二) SQL Azure vs SQL Server
    webbrowser的自动提交
    提取视频的背景声音的软件
    Listview列排序的bug原因
    两个奇怪的问题
  • 原文地址:https://www.cnblogs.com/buffer/p/1619593.html
Copyright © 2011-2022 走看看