码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之Singleton

时间:2014-07-07 15:42:48      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

 

Singleton 解决的问题:

         一个类只允许产生一个对象。一般如果系统有许多部分组成,而每一个部分只希望被创建一次(一个实例),或者 工程中需要一些全局共享的数据,这些数据可以被封装在一个类里面,这个类也只允许创建一个对象(实际项目中可能还要考虑数据的同步问题,本文不考虑,一次只解决一个问题)。

Singleton 实现过程:

      1. 私有化类的构造函数。

      2. 添加一个指向这个类的静态指针 。

      2. 添加静态函数 (创建这个类的唯一对象,并且将这个对象的地址赋予静态指针)。

Code Implement   

#include "stdafx.h"

#include <iostream>
#include <string>

using namespace std;

class Singleton
{

private:
    Singleton(){};

public:
    static Singleton *m_pSingleton;

public:
    static Singleton* Create()
    {
        if(NULL == m_pSingleton)
            m_pSingleton = new Singleton();

        return m_pSingleton;
    }

public:
    static void Delete()
    {
        if(NULL!= m_pSingleton)
        {
            delete m_pSingleton;
            m_pSingleton = NULL;
        }

    }

public:
    string m_ObjectName;
public:
    void SetObjectName(string name)
    {
        m_ObjectName = name;
    }
    string GetObjectName()
    {
        return m_ObjectName;
    }

};

Singleton* Singleton::m_pSingleton = NULL;

int _tmain(int argc, _TCHAR* argv[])
{
    //Singleton object1; // Fail to create object 
   Singleton *pObject1 = Singleton::Create ();
   string name =string("object1");

   pObject1->SetObjectName(name);
   cout<<"Cur object name is : "<< pObject1->GetObjectName()<<endl;
Singleton
*pObject2 = Singleton::Create (); cout<<"Cur object name is : "<< pObject2->GetObjectName()<<endl;

     pObject1->Delete();
     pObject2->Delete();

   return 0;
}

Result:

 bubuko.com,布布扣

Renark: 本文不考虑数据的同步性问题,一旦使用singleton 要使用内核对象等方法对数据同步(多线程 分布式等情况下)。

                                                                                               一次只解决一个问题

 

设计模式之Singleton,布布扣,bubuko.com

设计模式之Singleton

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/bkycode/p/3815200.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!