首页 > 代码库 > 设计模式之Singleton
设计模式之Singleton
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:
Renark: 本文不考虑数据的同步性问题,一旦使用singleton 要使用内核对象等方法对数据同步(多线程 分布式等情况下)。
一次只解决一个问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。