单例
2015-12-14 09:35
239 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Singleton
{
/// <summary>
/// 构造函数必须是私有的,
///这样在外部便无法使用new来创建该类的实例
/// </summary>
private Singleton()//作用是因为定义了私有的构造函数,外界构造实例的时候,是通过构造函数来创建新对象实例的
{
}
/// <summary>
/// 定义一个素有的静态全局变量来保存该类的唯一实例
/// </summary>
private static Singleton singleton;
/// <summary>
/// 定义一个只读静态对象,
///且这个对象是在程序运行是创建的
/// </summary>
///
private static readonly object syncObject = new object();//作用是什么?
//这是一个锁,用于用相同的这个对象去锁住共同访问的内容
/// <summary>
/// 定义一个全局访问点
/// 设置为静态方法
/// 则在类的外部便无需实例化就可以使用该方法了
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
//这里保证只实例化一次
//即在第一次调用时实例化
//以后调用就不会再实例化
//第一重singleton==null
if (singleton == null)
{
lock (syncObject)
{
if(singleton==null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
static void Main(string[] args)
{
Singleton sigle=Singleton.GetInstance();
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Singleton
{
/// <summary>
/// 构造函数必须是私有的,
///这样在外部便无法使用new来创建该类的实例
/// </summary>
private Singleton()//作用是因为定义了私有的构造函数,外界构造实例的时候,是通过构造函数来创建新对象实例的
{
}
/// <summary>
/// 定义一个素有的静态全局变量来保存该类的唯一实例
/// </summary>
private static Singleton singleton;
/// <summary>
/// 定义一个只读静态对象,
///且这个对象是在程序运行是创建的
/// </summary>
///
private static readonly object syncObject = new object();//作用是什么?
//这是一个锁,用于用相同的这个对象去锁住共同访问的内容
/// <summary>
/// 定义一个全局访问点
/// 设置为静态方法
/// 则在类的外部便无需实例化就可以使用该方法了
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
//这里保证只实例化一次
//即在第一次调用时实例化
//以后调用就不会再实例化
//第一重singleton==null
if (singleton == null)
{
lock (syncObject)
{
if(singleton==null)
{
singleton = new Singleton();
}
}
}
return singleton;
}
}
static void Main(string[] args)
{
Singleton sigle=Singleton.GetInstance();
}
}
相关文章推荐
- Java正则表达式学习教程
- Jquery easyui从零单排之datagrid添加行单击事件
- Linux(ubuntu)+gcc/g++ 升级
- 【译】持久化存储解决方案MagicalRecord使用入门
- 高仿精仿QQ空间ios源码
- 谷歌浏览器Chrome不再支持showModalDialog的解决办法
- 自定义进度条ProgressBar的实现
- shiro权限框架简单快速入门
- Volley框架的二次封装
- Hyper-v Server NUMA
- Hyper-v Server NUMA
- 【转】集体智慧与协同过滤
- JAVA中的堆和栈
- 周鸿祎:混日子,会让你失去竞争力
- win7删除微软拼音输入法
- LeetCode 278 First Bad Version
- 再论 golang 环境配置建议
- 对话框学习经验摘记
- JBPM4.4:流程定义语言和活动、事件
- 你应该知道的9个优秀的CSS框架