标签:end 接口 不同 class 创建型 析构 技术 new map
1) 意图:
保证一个类仅有一个实例,并且提供一个访问它的全局访问点
2) 结构:
其中:
Singleton提供一个instance操作,这是其他客户访问该类的唯一实例。
保证唯一实例有以下操作:
3) 适用性:
4) 举例:
这里举例分两个,一个单例,一个多例,多例就是一个类可以根据参数不同构建不同的实例,但这些个实例也是唯一的。
1 class Singleton 2 { 3 private: 4 Singleton() {} 5 virtual ~Singleton() {} 6 public: 7 static Singleton* instance() 8 { 9 static Singleton* Instance; 10 if (Instance == NULL) 11 { 12 static CMutex Mutex; 13 Mutex.Lock(); 14 if (Instance == NULL) 15 { 16 Instance = new Singleton(); 17 } 18 Mutex.Unlock(); 19 } 20 return Instance; 21 } 22 };
2. 多例
1 std::map<int, Singleton*> Singleton::s_map; 2 class Singleton 3 { 4 private: 5 Singleton(int num):m_num(num) {} 6 virtual ~Singleton() {} 7 public: 8 static Singleton* instance(int num) 9 { 10 for (std::map<int, Singleton*>::iterator it = s_map.begin(); 11 it != s_map.end(); ++it) 12 { 13 if (it->first == num) 14 { 15 return it->second; 16 } 17 } 18 static CMutex Mutex; 19 Mutex.Lock(); 20 Singleton* Instance = new Singleton(num); 21 s_map.insert(std::map<int, Singleton*>::value_type(num, Instance)); 22 Mutex.Unlock(); 23 return Instance; 24 } 25 private: 26 static std::map<int, Singleton*> s_map; 27 int m_num; 28 };
标签:end 接口 不同 class 创建型 析构 技术 new map
原文地址:https://www.cnblogs.com/ho966/p/12229926.html