单例模式
单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例,通过单例模式防止私有成员被多次引用,防止数据被随意纂改。本文使用的是线程不安全的懒汉式单例。
创建单例模式
首先,创建一个类,定义一个静态的私有变量 m_Instance = null,用来存储单例对象的实例。
接着,创建私有构造函数,确保它不能从类外部被实例化,只有一个实例被创建。
最后,使用 get()和set()接口来实现调用。在 get 访问器中包含了一个检查,确保m_Instance 只在第一次访问时被创建。
private static GameManager m_Instance = null;
// 私有构造函数,防止外部通过new关键字创建实例
private GameManager()
{
// 可以在这里初始化一些资源
}
//接口调用实现
public static GameManager instance
{
get
{
if (m_Instance == null)
{
m_Instance = new GameManager();
}
return m_Instance;
}
}
单例模式使用示例
通过访问单例实例,可以发现gameManager1和gameManager2引用了同一个GameManager实例,因此它们的name属性相同,并且它们是用一个对象。
cs
class Program
{
static void Main(string[] args)
{
GameManager gameManager1 = GameManager.Instance;
GameManager gameManager2 = GameManager.Instance;
Console.WriteLine(gameManager1.name); // 输出:我是Game Manager
Console.WriteLine(gameManager2.name); // 输出:我是Game Manager
Console.WriteLine(gameManager1 == gameManager2); // 输出:True
}
}
线程安全问题
虽然这种实现在单线程环境中工作良好,但它在多线程环境中可能不安全。如果多个线程同时访问Instance属性并发现m_Instance为null,可能会创建多个实例。因此在使用的时候需要考虑安全问题。