C#设计模式-单例模式
```csharp
//一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
// 优点:
//1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。
//2、避免对资源的多重占用(比如写文件操作)。
//缺点:没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
public class SingleObject
{
/// <summary>
/// 实例化单例
/// </summary>
private static SingleObject instance;
private static int index = 0;
// 定义私有构造函数,使外界不能创建该类实例
private SingleObject()
{
}
#region 多线程情况下不能保证只有一个单例
//单例模式的实现在单线程下确实是完美的,然而在多线程的情况下会得到多个Singleton实例,因为在两个线程同时运行GetInstance方法时,
//此时两个线程判断(uniqueInstance ==null)这个条件时都返回真,此时两个线程就都会创建Singleton的实例,这样就违背了我们单例模式初衷了
/// <summary>
/// 多线程情况下并不能保证只有一个单例
/// </summary>
/// <returns></returns>
public static SingleObject GetInstance()
{
// 如果类的实例不存在则创建,否则直接返回
if (instance == null)
{
instance = new SingleObject();
Console.WriteLine( $"创建单例{index++}");
}
return instance;
}
#endregion
public void showMessage()
{
Console.WriteLine( "单例已被创建,");
}
}
``