博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:单例模式
阅读量:5287 次
发布时间:2019-06-14

本文共 1959 字,大约阅读时间需要 6 分钟。

单例:在程序的整个进程中只会被实例化一次

如:User user =new User();实例化一个User();的时候new User()是调用的 User类的 默认的公有构造函数:public User(){};

一.想要整个程序只实例化一次这个User的话如:

1.private static User_user=null; 定义一个私有的静态变量

2.提供静态公有方法返回实例化对象

public static GetUser(){           if(User_user==null)            {                User_user=new User();            }            return User_user;        }

3.调用:User user =User.GetUser();//进行返回单个实例

4.多线程的时候需要加一把锁:

private static object _lock =new object();//定义一个静态的对象最好是object类型        public static GetUser(){             if (User_user==null)            {              lock (_lock)                {                  if(User_user==null)                    {                        User_user=new User();                    }                }            }            return User_user;        }

 

二.想要整个程序只实例化一次这个User的话如:

private static User User_user =null;//提供私有静态实例对象        static   User()//CLR运行的时候,第一次使用这个类之前,一定会而且只执行一次        {            User_user =new User();        }        public static GetUser()//提供公有静态方法供外部调用        {            return User_user;        }

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
//双重锁机制
 
namespace 
Singleton
{
    
public 
class 
Singleton
    
{
        
//定义一个私有的静态全局变量来保存该类的唯一实例
        
private 
static 
Singleton singleton;
        
//定义一个只读静态对象
        
//且这个对象是在程序运行时创建的
        
private 
static 
readonly 
object 
syncObject = 
new 
object
();
 
        
/// <summary>
        
/// 构造函数必须是私有的
        
/// 这样在外部便无法使用 new 来创建该类的实例
        
/// </summary>
        
private 
Singleton()
        
{ }
 
        
/// <summary>
        
/// 定义一个全局访问点
        
/// 设置为静态方法
        
/// 则在类的外部便无需实例化就可以调用该方法
        
/// </summary>
        
/// <returns></returns>
        
public 
static 
Singleton GetInstance()
        
{
            
//这里可以保证只实例化一次
            
//即在第一次调用时实例化
            
//以后调用便不会再实例化
            
//第一重 singleton == null
            
if 
(singleton == 
null
)
            
{
                
lock 
(syncObject)
                
{
                    
//第二重 singleton == null
                    
if 
(singleton == 
null
)
                    
{
                        
singleton = 
new 
Singleton();
                    
}
                
}
            
}
            
return 
singleton;
        
}
    
}
}

转自https://www.cnblogs.com/ingstyle/p/6284967.html

转载于:https://www.cnblogs.com/H1991/p/8377755.html

你可能感兴趣的文章
List中的元素 去重
查看>>
7/27 进制转换
查看>>
解决nginx无法访问问题
查看>>
[老老实实学WCF] 第十篇 消息通信模式(下) 双工
查看>>
WCF随笔3----消息编码器
查看>>
通过 C# 代码操作 Google 日历
查看>>
曲演杂坛--一条DELETE引发的思考
查看>>
web测试
查看>>
POJ 3150 Cellular Automaton(矩阵乘法+二分)
查看>>
Shell 条件判断
查看>>
静态库与动态库
查看>>
java 逆波兰表达式
查看>>
代码抖动IOS 仿网易 banner scrollview 到头后 手势 事件提交到下级 拉开界面的效果...
查看>>
java Collections.sort()实现List排序的默认方法和自定义方法
查看>>
小米笔试题(动态规划)
查看>>
μC/OS-III---I笔记8---事件标志
查看>>
Cookie
查看>>
自动化测试---等待
查看>>
Ring3创建事件Ring0设置事件
查看>>
Arcgis Server 10.2默认服务端口号修改方法
查看>>