刚刚看设计模式,还不知道这些设计模式有什么做用,可是先记录下来,也许之后会用到!设计模式
单例模式:就是保证一个类只有一个实例的实现方法多线程
如,有一个构造函数,使外界不能建立该类的实例函数
private 这个类的类名()
{
Console.Write("这是单例模式测试\n");
}测试
设置私有,保证它不能被外部实例化,线程
在当前类中创建一个静态变量用来保存这个类的实例设计
private static 这个类的类名 example;排序
再定义一个标识,后面用来加锁用到同步
private static readonly object locker = new object();it
这些变量和标识都设置为私有,已保证不能被外部调用class
以后就要创建一个公有的方法实例化这个类,外部经过调用这个公有的方法来获得这个类的实例
public static 这个类的类名 GetInstance()
1.判断这个类是否实例化
if(example==null)
2.锁住locker,是得locker被锁期间不被执行里面的方法
lock (locker)
3.再次判断类是否被实例化
if(example==null)
4.实例化这个类
example= new Singleton();
5.最后输出这个类的实例
return example;
获得完整代码
public class Singleton
{
//定义一个静态变量来保存类的实例
private static Singleton example;
//定义一个标识确保线程同步
private static readonly object locker = new object();
//定义私有构造函数,使外界不能建立该类的实例
private Singleton()
{
Console.Write("这是单例模式测试\n");
}
/// <summary>
/// 定义公有方法提供一个全局访问点,同时你也能够定义公有属性来提供全局访问点
/// </summary>
/// <returns></returns>
public static Singleton GetInstance()
{
//多线程同时运行到这里,会同时经过这个判断条件执行条件内的代码
if (example== null)//限制一
{
//多线程同时运行到这里后,只能有一个线程经过lock锁,其余线程会被挂起
lock (locker)//限制二
{
// 再次判断若是类的实例是否建立,若是不存在则实例化,反之就直接输出类的实例
if (example== null)限制三
{
example= new Singleton();
}
}
}
return example;
}
}
若是有多个线程同时运行到限制一,会同时经过限制一,这样的话就会就有多个线程同时运行到限制二,这些线程运行到限制二后,会进行一个小的“排序”,“排序”第一的线程经过限制二后,限制二就会自我封闭,直到“排序”第一的线程跑出限制二的范围,限制二才会继续容许其余“排序”的线程经过。这样,到限制三的时候,就只有一个“排序”第一的线程了,排序第一的线程顺利经过限制三,实例化类,跑出限制三,限制二。这里,刚才在等待的其余线程就会陆续经过限制二了,可是它们经过限制二也已经晚了,由于这个类已经被实例化过了,因此它们也就没法通限制三了,而直接输出被“排序”第一的线程实例化后的类实例,