单例模式

参考《剑指offer》p34.

C#有运行时垃圾回收机制,单例模式很容易实现,如下代码,可以实现多线程单例模式

1 public sealed class Singleton
2 {
3      private Singleton(){}
4      private static Singleton instance=new Singleton();
5      public static Singleton Instance
6      {
7            return instance;
8      }
9 }    

该程序存在的问题是,当调用Singlton类时就会创建实例,而不是在调用Singleton.Instance时创建。

程序改进为按需创建参考《剑指offer》p35.

 1 public sealed class Singleton
 2 {
 3       private Singleton(){}
 4       private static Singleton Instance
 5       {
 6             get
 7             {
 8                     return Nested.instance;
 9             }
10       }
11       private class Nested
12       {
13             private static Nested(){}
14             internal static readonly Singleton instance=new Singleton();
15       }
16 }

C++方法的单例模式

参考自:http://blog.csdn.net/boyxiaolong/article/details/6645681

 1 #include <iostream>       
 2 using namespace std;     
 3   
 4 //单例类的C++实现     
 5   
 6 class Singleton       
 7 {       
 8 private:       
 9        Singleton();//注意:构造方法私有                 
10   
11        static Singleton* instance;//惟一实例       
12        int var;//成员变量(用于测试)     
13   
14 public:       
15        static Singleton* GetInstance();//工厂方法(用来获得实例)     
16        int getVar();//获得var的值      
17        void setVar(int);//设置var的值      
18        virtual ~Singleton();   
19 };     
20   
21 //构造方法实现     
22   
23 Singleton::Singleton()       
24 {       
25        this->var = 20;       
26        cout<<"Singleton Constructor"<<endl;       
27 }     
28   
29 Singleton::~Singleton()       
30 {     
31        cout<<"Singleton Destructor"<<endl;    
32        //delete instance;       
33 }     
34   
35 //初始化静态成员       
36 /*Singleton* Singleton::instance=NULL;  
37 Singleton* Singleton::GetInstance()     
38 {     
39        if(NULL==instance)  
40               instance=new Singleton();  
41        return instance;     
42 }*/  
43   
44 Singleton* Singleton::instance=new Singleton();   
45 Singleton* Singleton::GetInstance()       
46 {       
47        return instance;       
48 }       
49   
50 //seter && getter含数     
51   
52 int Singleton::getVar()       
53 {       
54        return this->var;       
55 }     
56   
57 void Singleton::setVar(int var)       
58 {       
59        this->var = var;       
60 }     
61   
62 //main       
63 void main()       
64 {       
65        Singleton *ton1 = Singleton::GetInstance();       
66        Singleton *ton2 = Singleton::GetInstance();    
67       if(ton1==ton2)    
68               cout<<"ton1==ton2"<<endl;    
69        cout<<"ton1 var = "<<ton1->getVar()<<endl;   
70        cout<<"ton2 var = "<<ton2->getVar()<<endl;       
71        ton1->setVar(150);       
72        cout<<"ton1 var = "<<ton1->getVar()<<endl;    
73        cout<<"ton2 var = "<<ton2->getVar()<<endl;    
74        delete Singleton::GetInstance();//必须显式地删除
75        //Singleton *ton3= Singleton::GetInstance();   
76        //cout<<"ton3 var = "<<ton3->getVar()<<endl;       
77 }     

 

 

 

posted @ 2013-12-20 12:27  蓝兔子  阅读(201)  评论(1编辑  收藏  举报