惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
Google DeepMind News
Google DeepMind News
美团技术团队
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
A
About on SuperTechFans
Recent Announcements
Recent Announcements
D
Docker
Vercel News
Vercel News
Engineering at Meta
Engineering at Meta
腾讯CDC
Martin Fowler
Martin Fowler
阮一峰的网络日志
阮一峰的网络日志

博客园 - Vengen

【笔记】DataTable或IList使用GroupBy方法的lamda表达式 WSS学习笔记(3) – 在“用户控件”中使用SPGridView WSS学习笔记(2) - 用QuickPart部署“用户控件”来替代WebPart WSS学习笔记(1) - 创建简单的WebPart 用ILmerge工具将C#中的EXE和DLL文件合并成单个文件 修改WordPress文章索引列表的日期格式 Windows7部署Android开发环境傻瓜式教程(Eclipse+ADT) 如何使用C#访问WordPress的xmlrpc.php - Vengen - 博客园 Windows7部署WordPress傻瓜式教程(IIS7.5+MySQL+PHP+WordPress) C#面向对象设计模式学习笔记(10) - Facade 外观模式(结构型模式) C#面向对象设计模式学习笔记(9) - Decorator 装饰模式(结构型模式) C#面向对象设计模式学习笔记(8) - Composite 组合模式(结构型模式) C#面向对象设计模式学习笔记(7) - Bridge 桥接模式(结构型模式) C#面向对象设计模式学习笔记(6) - Adapter 适配器模式(结构型模式) C#面向对象设计模式学习笔记(5) - Prototype 原型模式(创建型模式) C#面向对象设计模式学习笔记(4) - Factory Method 工厂方法模式(创建型模式) C#面向对象设计模式学习笔记(3) - Builder 生成器模式(创建型模式) C#面向对象设计模式学习笔记(2) - Abstract Factory 抽象工厂模式(创建型模式) - Vengen C#面向对象设计模式学习笔记 - 开篇
C#面向对象设计模式学习笔记(1) - Singleton 单件模式(创建型...
Vengen · 2009-12-05 · via 博客园 - Vengen

Singleton 单件模式

保证一个类只有一个实例,并提供一个该实例的全局访问点。

核心是如何控制用户使用new对一个类的实力构造器的任意调用。

1、单线程Singleton模式实现

代码

public class Singleton
{
//private static Singleton instance = new Singleton(); //不进行延时加载
private static Singleton instance;
private Singleton() { } //构造器
public static Singleton Instance
{
get
{
if (instance == null)
{
instance
= new Singleton();
}
return instance;
}
}
}
public class Test
{
public static void Main()
{
Singleton t1
= Singleton.Instance;
Singleton t2
= Singleton.Instance;
Console.WriteLine(Object.ReferenceEquals(t1, t2)
== true);
}
}

2、多线程Singleton模式实现

代码

public class Singleton
{
private static volatile Singleton instance = null; //“volatile”用于保证代码执行顺序不被编译器调整
private static object lockHelper = new Object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance
= new Singleton();
}
}
}
return instance;
}
}
}

3、使用静态构造器实现

特点:多线程、延时加载都能保证,但是不能传参数,如果需要传参数,可以附加属性或方法实现。

实际项目中比较推荐的做法

代码

public class Singleton
{
public static readonly Singleton Instance = new Singleton();
private Singleton() { }
}
public class Singleton
{
public static readonly Singleton Instance;
static Singleton()//静态构造器
{
Instance
= new Singleton();
}
private Singleton() { }
}