当前位置:首页 > 编程笔记 > 正文
已解决

C#单例模式懒汉式与饿汉式

来自网友在路上 169869提问 提问时间:2023-11-19 08:02:15阅读次数: 69

最佳答案 问答题库698位专家为你答疑解惑

单例模式一般分为懒汉模式和饿汉模式,懒汉式单例在第一次引用时创建实例,不是在类加载时;饿汉式单例模式是一种在类加载时就创建实例的方式,因此也称为静态初始化。
在这里插入图片描述
单例模式实现的技巧时构造私有,向外提供静态实例。

懒汉式单例模式实现

public class Singleton
{private static Singleton instance = null;private Singleton() {}public static Singleton Instance{get{if (instance == null){instance = new Singleton();}return instance;}}
}

线程安全的懒汉式

为了确保线程安全,在懒汉式的基础上添加锁。

public class Singleton
{private static Singleton instance = null;private static readonly object padlock = new object();private Singleton() {}public static Singleton Instance{get{lock (padlock){if (instance == null){instance = new Singleton();}return instance;}}}
}

使用Lazy实现懒汉式单例模式

使用 Lazy:线程安全,支持延迟初始化,简化代码。

public class Singleton
{private static readonly Lazy<Singleton> lazy =new Lazy<Singleton>(() => new Singleton());public static Singleton Instance { get { return lazy.Value; } }private Singleton() {}
}

饿汉式单例实现

public class Singleton
{// 在类加载时就创建实例private static readonly Singleton instance = new Singleton();// 私有构造函数,确保外部不能通过new创建实例private Singleton() {}// 提供一个全局访问点public static Singleton Instance{get{return instance;}}// 你可以在这个类中添加其他功能
}

在饿汉式单例实现中,类中的 instance 字段在类加载时就被初始化,因此在多线程环境下也是线程安全的。
构造函数是私有的,防止外部通过new关键字创建实例。
通过 Instance 属性提供了对单例实例的全局访问点。
饿汉式单例模式的优点是简单、线程安全,但缺点是可能在程序启动时就创建实例,可能会浪费一些资源,特别是在实例的创建和初始化过程较为复杂的情况下。选择使用饿汉式还是懒汉式(延迟初始化)取决于具体的需求和性能考虑。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C#单例模式懒汉式与饿汉式":http://eshow365.cn/6-39052-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!