定义

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的目的是为了解决类的对象创建过程中出现的问题

分类

饿汉式

特点:饿汉式单例模式在类加载时就已经创建了实例,因此可以确保线程安全。

实现:

1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton<T> where T:new()
{
private static readonly T instance = new T();

private T() {}

public static T GetInstance()
{
return instance;
}
}

优点

  1. 饿汉式单例模式可以确保在程序运行期间只有一个实例对象存在,因此可以避免频繁创建和销毁对象占用系统资源的问题。
  2. 饿汉式单例模式在类加载时就已经创建了实例,因此可以确保线程安全,不需要考虑多线程访问时可能会出现的线程安全性问题。

缺点

  1. 在程序启动时就创建实例对象可能会过早地占用系统资源,这样可能会影响程序的启动速度。
  2. 饿汉式单例模式将实例对象的创建和控制访问权限两个功能放在了一起,可能会违反单一职责原则,使得代码的可读性和可维护性降低。

懒汉式

特点:懒汉式单例模式在需要使用实例对象时才进行实例化,常见的懒汉式单例模式实现方式包括双重检查锁定和静态内部类等。

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Singleton<T> where T:new()
{
private static volatile T instance;
private static readonly object syncRoot = new object();


public static T GetInstance()
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new T();
}
}
}

return instance;
}
}