设计模式之单例模式

 1 #include<iostream>
 2 using namespace std;
 3 #include<string>
 4 
 5 //单例模式
 6 //控制某个对象个数,只有一个
 7 
 8 //实现单例的步骤
 9 //1.构造函数的私有化
10 //2.增加静态私有的当前类指针
11 //3.提供静态的对外接口,可以让用户获得单例对象
12     
13 //单例分为懒汉式和饿汉式,在类外初始化的时候可看出不同
14 
15 //懒汉式是多线程不安全的,因为在getInstance那里可能创建多个类
16 
17 //懒汉式
18 class singleton_lazy{
19 private:
20     singleton_lazy(){
21         cout<<"lazy"<<endl;
22     }
23     static singleton_lazy* sl;
24 public:
25     static singleton_lazy* getInstance(){
26         if(sl==NULL){
27             sl=new singleton_lazy;
28         }
29         return sl;
30     }
31 };
32 //类外初始化    
33 singleton_lazy* singleton_lazy::sl=NULL;
34 
35 
36 //饿汉式
37 class singleton_hungry{
38 private:
39     singleton_hungry(){
40         cout<<"hungry"<<endl;
41     }
42     static singleton_hungry* sh;
43 public:
44     static singleton_hungry* getInstance(){
45         return sh;
46     }
47 };
48 //类外初始化    
49 singleton_hungry* singleton_hungry::sh=new singleton_hungry;
50 
51 
52 void test1()
53 {
54     singleton_lazy* p1=singleton_lazy::getInstance();
55     singleton_lazy* p2=singleton_lazy::getInstance();
56     if(p1==p2){
57         cout<<"lazy is singleton"<<endl;
58     }
59     else{
60         cout<<"lazy is not singleton"<<endl;
61     }
62     
63     singleton_hungry* p3=singleton_hungry::getInstance();
64     singleton_hungry* p4=singleton_hungry::getInstance();
65     if(p3==p4){
66         cout<<"hungry is singleton"<<endl;
67     }
68     else{
69         cout<<"hungry is not singleton"<<endl;
70     }
71 }
72 int main()
73 {
74     test1();
75     cout<<"main"<<endl;
76     return 0;
77 }

 

posted @ 2020-04-07 14:49  njit-sam  阅读(133)  评论(0编辑  收藏  举报