static void Main(string[] args) { //单例模式:只允许对象只能是实例化一次,我们将他的构造函数定义为私有的时候外部就不能够实例化该对象,但是外部我们又不能直接的实例化,我们知道Privite内部是可以 //被调用的,于是我们可以在他的内部中调用其对应的方法来创建它的对象,这样我们就可可以实现对象只被实例化一次。 //Context contex = new Context();显然我们这里是不能编译通过的 Context context = Context.CreateInstence();//这样我们就实现了单例模式,该对象在实例化的过程中创建出来的对象和之前的是一样的。但是这种存在着弊病 //那就是在单线程的时候我们确实能够保证对象的唯一,但是针对于多线程我们并不能保证它是唯一的。 //多线程下的单例模式(lock) MultiSingle.Create(); //在C#与公共语言运行库提供了一种"静态初始化",这种方法不需要开发人员显示的编写线程安全代码 SingleTon sig1 = SingleTon.GetObj(); }
public static MultiSingle Create() { if (multiSingle == null) { //在这里我们为什么需要锁住另外创建的对象而我们不直接锁住mutiSingle //因为我们知道这个实例可能根本就没有我们如何锁它. lock (obj) { if (multiSingle == null) { multiSingle = new MultiSingle(); } } } return(multiSingle); }