C++单例模式之注册表方法
来源:互联网 发布:java 计算时间戳差值 编辑:程序博客网 时间:2024/06/17 00:34
#include <iostream>#include <typeinfo>#include <map>using namespace std;class Singleton1{private: static map<string, Singleton1*> mapList; static Singleton1* _instance;public: static Singleton1* GetInstance(string name){ _instance = LookUp(name); return _instance; } static void Register(string name, Singleton1* single){ Singleton1* regist = LookUp(name); if (regist != NULL){ return; }else{ mapList.insert(make_pair(name, single)); } }protected: static Singleton1* LookUp(string name){ map<string, Singleton1*>::iterator iter = mapList.find(name); if (iter != mapList.end()) return iter->second; else return NULL; }};Singleton1* Singleton1::_instance = NULL;map<string, Singleton1*> Singleton1::mapList;class MySingleton : public Singleton1{private: MySingleton(){ }public: static void Regist(){ Singleton1::Register("MySingleton",new MySingleton()); } void Print(){ cout << "this is MySingleton" << endl; }};class MySingleton1 : public Singleton1{private: MySingleton1(){}public: static void Regist(){ Singleton1::Register("MySingleton1",new MySingleton1()); } void Print(){ cout << "this is MySingleton1" << endl; }};static void before_main(){ cout << "before main" << endl; MySingleton::Regist(); MySingleton1::Regist();}static void before_main() __attribute__((constructor));int main(){ cout << "--Singleton1--" << endl; Singleton1* obj1 = MySingleton::GetInstance("MySingleton"); Singleton1* obj2 = MySingleton::GetInstance("MySingleton"); cout << obj1 << endl; cout << obj2 << endl; MySingleton* my1 = (MySingleton*)obj1; MySingleton* my2 = (MySingleton*)obj2; my1->Print(); my2->Print(); Singleton1* ob1 = MySingleton::GetInstance("MySingleton1"); Singleton1* ob2 = MySingleton::GetInstance("MySingleton1"); cout << ob1 << endl; cout << ob2 << endl; MySingleton1* my11 = (MySingleton1*)ob1; MySingleton1* my12 = (MySingleton1*)ob2; my11->Print(); my12->Print(); return 0;}
0 0
- C++单例模式之注册表方法
- C++--模式之单例模式
- (C#)设计模式 之 单例模式
- 设计模式之单例模式(C++)
- C#--设计模式之单例模式
- Objective-C 设计模式之单例
- 初识Objecive-C 之 单例模式
- Objective-C之单例设计模式
- Object-c之单例模式
- qt (c++) 之 单例模式
- 【C++】单例模式之C++实现
- 设计模式之单例模式(C++)
- C语言和设计模式(之单例模式)
- Objective-C中的设计模式之单例模式
- C#单例模式
- C#-单例模式
- 单例模式(C++)
- 【C++】单例模式
- SQL注入
- 枚举类型
- db2 在windows下的安装与配置
- HDU 1060 Leftmost Digit
- 怎么破解wifi密码?如何破解无线路由器密码?
- C++单例模式之注册表方法
- Java中的五种单例模式实现方法
- 编写一函数判断某数是否是素数
- 使用反射实现Java下的委托机制
- struts2 Interceptors 拦截器
- Java socket接收出现中文乱码
- struts2的default.properties详解
- coalesce和nvl函数
- 修改python默认路径:PYTHONPATH变量