单例模式(Singleton)
单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例。
1)普通单例模式
using System;
namespace SingletonPattern
{
///
/// 单例模式(非线程安全)
///
public class Singleton
{
private static Singleton singleton;
private Singleton() { }
///
/// 获取实例-线程非安全模式
///
///
public static Singleton GetSingleton()
{
if (singleton == null)
singleton = new Singleton();
return singleton;
}
}
class Program
{
static void Main(string[] args)
{
var obj = Singleton.GetSingleton();
Console.ReadKey();
}
}
}
2)懒汉式单例模式
using System;
namespace ConsoleApplication
{
///
/// 单例类:一个构造对象很耗时耗资源类型
///
/// 懒汉式单例模式
///
public class Singleton// //泛型类型里面的静态字段,是随着不同的类型参数唯一的 泛型单例是不可能的
{
///
/// 构造函数耗时耗资源
///
private Singleton()
{
}
///
/// 全局唯一静态 重用这个变量
///
private static volatile Singleton _Singleton = null;
//volatile是C#中用于控制同步的关键字,其意义是针对程序中一些敏感数据,
//不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,volatile是修饰变量的修饰符。
private static object Singleton_Lock = new object();
///
/// 2 公开的静态方法提供对象实例
///
///
public static Singleton CreateInstance()
{
if (_Singleton == null)
{
lock (Singleton_Lock)//保证只有一个线程进去判断+初始化
{
if (_Singleton == null)
{
_Singleton = new Singleton();
}
}
}
return _Singleton;
}//懒汉式 调用了方法才去构造
}
class Program
{
static void Main(string[] args)
{
var obj = Singleton.CreateInstance();
Console.ReadKey();
}
}
}
3)饿汉式单例模式
using System;
namespace ConsoleApplication
{
///
/// 单例类:一个构造对象很耗时耗资源类型
/// 饿汉式
///
public class Singleton
{
///
/// 构造函数耗时耗资源
///
private Singleton()
{
}
///
/// 静态字段:在第一次使用这个类之前,由CLR保证,初始化且只初始化一次
/// 这个比今天构造函数还早
///
private static Singleton _Singleton = new Singleton();
public static Singleton CreateInstance()
{
return _Singleton;
}//饿汉式 只要使用类就会被构造
}
class Program
{
static void Main(string[] args)
{
var obj = Singleton.CreateInstance();
Console.ReadKey();
}
}
}
或者
using System;
namespace ConsoleApplication
{
///
/// 单例类:一个构造对象很耗时耗资源类型
///
/// 饿汉式
///
public class Singleton
{
///
/// 1 构造函数耗时耗资源
///
private Singleton()
{
}
///
/// 静态构造函数:由CLR保证,程序第一次使用这个类型前被调用,且只调用一次
///
///
static Singleton()
{
_Singleton = new Singleton();
}
private static Singleton _Singleton = null;
public static Singleton CreateInstance()
{
return _Singleton;
}//饿汉式 只要使用类就会被构造
}
class Program
{
static void Main(string[] args)
{
var obj= Singleton.CreateInstance();
Console.ReadKey();
}
}
}
原文地址:https://blog.csdn.net/lwf3115841/article/details/132126485
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。