后端开发 \ C# \ 单例模式

单例模式

总点击68
简介:单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。

实现思路:在类中的私有方法外界不能访问,把实例放在私有方法中,通过同类中 的公有静态方法去把实例实现。外界可以调用公有接口以实现实例,再对公有接口进行限制,使得它一次只能生成一次实例。

简单的单利模式实现code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _20170920

{

class Singleton

{

private static Singleton instance;

private Singleton() { }

public static Singleton GetInstance()

{

if (instance == null)

{

instance = new Singleton();

}

return instance;

}

}

class Program

{

static void Main(string[] args)

{

Singleton c1 = Singleton.GetInstance();

Singleton c2 = Singleton.GetInstance();

if (c1 == c2)

Console.WriteLine("相同实例");

Console.ReadKey();

}

}

}


多线程时的单例模式需要加锁:为了保证多线程访问也只能生成一个实例

双重加锁code::

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace _20170920

{

class Singleton

{

private static readonly object synRoot = new object();//创建一个静态只读对象进行辅助访问

private static Singleton instance;

private Singleton() { }

public static Singleton GetInstance()

{

if (instance == null)

{

lock (synRoot)

{

if (instance == null)

{

instance = new Singleton();

}

}

}

return instance;

}

}

class Program

{

static void Main(string[] args)

{

Singleton c1 = Singleton.GetInstance();

Singleton c2 = Singleton.GetInstance();

if (c1 == c2)

Console.WriteLine("相同实例");

Console.ReadKey();

}

}

}


双重判断instance ==null ,是为了防止这样的情况:当instance==null 时,如果有两个进程同时通过了instance==null 的判断,一个进入了lock区,另外一个在外等候,当进入lock的完成创建时并退出由另外一个进入,如果此时没有instance ==null 的判断的话,这时候进入的也会创建一个instance,这时就达不到单例的效果了。。


0人推荐

推荐文章

热门标签

意见反馈 常见问题 官方微信 返回顶部