之前使用单例模式一直定义如下: public partial class Personnel
{
static volatile Personnel _instance = null;
static readonly object Padlock = new object();
private readonly DaoManager _daoManager = null;
private readonly ICommonDao _commonDao = null;
private Personnel()
{
_daoManager = ServiceConfig.GetInstance().DaoManager;
_commonDao = _daoManager[typeof(ICommonDao)] as ICommonDao;
}
/// <summary>
/// 获取单一实例
/// </summary>
/// <returns></returns>
public static Personnel GetInstance()
{
if (_instance == null)
{
lock (Padlock)
{
if (_instance == null)
{
_instance = new Personnel();
}
}
}
return _instance;
}
}这几天做一个项目,发现我们项目经理定义单例模式是这么做的: public partial class Personnel
{
private static Personnel _instance = new Personnel () ;
static readonly object Padlock = new object();
private readonly DaoManager _daoManager = null;
private readonly ICommonDao _commonDao = null;
private Personnel()
{
_daoManager = ServiceConfig.GetInstance().DaoManager;
_commonDao = _daoManager[typeof(ICommonDao)] as ICommonDao;
}
/// <summary>
/// 获取单一实例
/// </summary>
/// <returns></returns>
public static Personnel GetInstance()
{
return _instance;
}
}请问这两种定义单例模式的方法有没有什么差别呢?C#单例模式设计模式
{
static volatile Personnel _instance = null;
static readonly object Padlock = new object();
private readonly DaoManager _daoManager = null;
private readonly ICommonDao _commonDao = null;
private Personnel()
{
_daoManager = ServiceConfig.GetInstance().DaoManager;
_commonDao = _daoManager[typeof(ICommonDao)] as ICommonDao;
}
/// <summary>
/// 获取单一实例
/// </summary>
/// <returns></returns>
public static Personnel GetInstance()
{
if (_instance == null)
{
lock (Padlock)
{
if (_instance == null)
{
_instance = new Personnel();
}
}
}
return _instance;
}
}这几天做一个项目,发现我们项目经理定义单例模式是这么做的: public partial class Personnel
{
private static Personnel _instance = new Personnel () ;
static readonly object Padlock = new object();
private readonly DaoManager _daoManager = null;
private readonly ICommonDao _commonDao = null;
private Personnel()
{
_daoManager = ServiceConfig.GetInstance().DaoManager;
_commonDao = _daoManager[typeof(ICommonDao)] as ICommonDao;
}
/// <summary>
/// 获取单一实例
/// </summary>
/// <returns></returns>
public static Personnel GetInstance()
{
return _instance;
}
}请问这两种定义单例模式的方法有没有什么差别呢?C#单例模式设计模式
解决方案 »
- Form动态添加PictureBox,图片闪烁问题
- C# WndProc
- 程序发布后生成的.application文件里的具体内容代表的含义?
- datagridview
- 能否在函数中设置一种变量,函数退出再进入仍是原值?
- 一道练习题,好像很简单,搞不定了,郁闷……
- 我在WEB程序中使用listbox取值,为什么老是报错? ...在线
- 对路径“c:\inetpub\wwwroot\myText.txt”的访问被拒绝----我该怎样修改?谢谢!
- WPF,ObjectDataProvider绑定,怎么弄的?
- 程序打包问题
- 请教ShellExcute调用WinRar不能正常解压的问题
- 哪位大神帮忙看看as3的matrix和c#的Graphics有什么不同么?
2、延迟加载上,两种方法都会延迟加载。区别是:
第一种方法在第一次调用Personnel.GetInstance()的时候加载;
第二种方法在第一次用到Personnel类的时候加载。一般来说,如果没有特殊需求,第二种方法比较流行。一是写法简单,二是不需要加锁。
而.NET的静态是线程安全的,第二种在.NET中无任何问题
然后构造函数私有就可以了。