介绍
确保一个类只有一个实例,并提供一个全局访问点。
为什么要用单列模式
单例模式的使用自然是当我们的系统中某个对象只需要一个实例的情况,例如:操作系统中只能有一个任务管理器,操作文件时,同一时间内只允许一个实例对其操作等,既然现实生活中有这样的应用场景,自然在软件设计领域必须有这样的解决方案了(因为软件设计也是现实生活中的抽象),所以也就有了单例模式。
适用性
- 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
实现思路
懒汉式与饿汉式的根本区别在与是否在类内方法外创建自己的对象。
并且声明对象都需要私有化,构造方法都要私有化,这样外部才不能通过 new 对象的方式来访问。
饿汉式的话是声明并创建对象(因为他饿),懒汉式的话只是声明对象,在调用该类的 getinstance()
方法时才会进行 new
对象。
单线程Singleton实现(懒汉式,线程不安全)
1 | /// <summary> |
多线程实现(懒汉式,线程安全)
1 | /// <summary> |
静态实现(饿汉式)
1 | public class Singleton |
与下面的实现方式相同1
2
3
4
5
6
7
8
9class Singleton
{
public static readonly Singleton instance;
static Singleton()
{
instance = new Singleton();
}
private Singleton() { }
}