目录
前言
参考文章:
去读队友写的代码的时候由于看不懂才去学习的。
一般情况下,这种是用于数据库的开销避免。
例如:
csharp
public class DBConnectionManager
{
private static DBConnectionManager instance;
private DBConnectionManager()
{
connection = new MySqlConnection(connString);
}
public static DBConnectionManager Instance
{
get
{
if (instance == null)
{
instance = new DBConnectionManager();
}
return instance;
}
}
}
一、单例模式
1.1 什么是单例模式
特点是在第一次使用时才创建实例。
1.2 常见单例模式
饿汉式单例模式、双重检查锁定(Double-Checked Locking)单例模式
二、单例模式对比
- 饿汉式单例模式
类加载时就完成了实例化。避免了同步问题。
构造函数比较复杂,可能会造成资源浪费
java
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
- 懒汉式单例模式:【这里用C#代码】
双重检查锁定机制确保了多线程环境下的安全性
实现懒汉式单例模式需要处理同步问题,增加了代码的复杂性。
csharp
public sealed class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
- 双重检查锁定 单例模式
拥有饿汉式的优点,又保证了线程的安全,避免了不必要的同步开销。
java
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}