1.单例模式
它的特点是:
1.构造参数是私有的,可以防止其他类实例化它,即一个类只有一个实例
2.用一个静态变量来保存类的实例
3.提供一个全局访问点,使用一个公有的静态方法来实例化它
下面是一个支持多线程的单例模式代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace danlimoshi { public class Danli { //私有的构造函数,它不可以在外边创建实例 private Danli() { } private static Danli danli; private static object x=new object();//定义一个互斥信号量,保证多线程访问该静态实例的唯一性 public static Danli GetDanli()//定义一个公共静态方法来获取对象实例 { if (danli == null)//首先判断对象是否为空,如果不为空就不需要加锁了,节省时间 { lock (x)//保证多线程访问该静态实例的唯一性 { if (danli == null) { danli = new Danli(); } } } return danli; } public void show() { Console.WriteLine("工作中!!!"); } } class Program { static void Main(string[] args) { Danli danli = Danli.GetDanli(); danli.show(); Console.WriteLine("{0}",danli.GetHashCode()); Danli danli2 = Danli.GetDanli(); danli2.show(); //哈希函数用于快速生成一个与对象的值相对应的数字(哈希代码) Console.WriteLine(danli2.GetHashCode());//两个对象的哈希函数一样,说明在内存中的地址一样,只有一个实例 //比较两个对象是否相同 Console.WriteLine(danli.Equals(danli2)); } } }