Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】
2023/5/26 1:22:16
本文主要是介绍Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
〇、简介
1、什么是单例模式?
一句话解释:
单一的类,只能自己来创建唯一的一个对象。
单例模式(Singleton Pattern)是日常开发中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有一个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
一个比喻:(班主任与学生)
比如一个班级,只有一个班主任,任何一个同学要找班主任,都是找的同一个,班主任忙的时候,当然就出现排队的情况。
2、优缺点和使用场景
- 优点:内存里只有一个实例,减少了内存的开销,也避免了对象高频创建带来的性能损耗。
- 缺点:任务量大时,会出现排队,耗时增加。另外与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
使用场景举例:
- 要求生产唯一序列号。
- WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。
- 创建的一个对象需要消耗的资源过多,比如 I/O 与数据库的连接等。
一、单例模式简单实现
public class Singleton { private static Singleton instance = null; private static object lockObject = new object(); /// <summary> /// 私有化构造函数,防止外部实例化 /// </summary> private Singleton() { } public static Singleton Instance { get { if (instance == null) { lock (lockObject) // 线程同步锁 { if (instance == null) // Lazy Initialization { instance = new Singleton(); } } } return instance; } } /// <summary> /// 重置 Singleton /// </summary> public void Reset() { instance = null; } }
测试代码:
static void Main(string[] args) { var instance1 = Singleton.Instance; var instance2 = Singleton.Instance; Console.WriteLine(instance1 == instance2); // 输出 true }
二、带参数的单例模式实现
public class SingletonParameters { private static SingletonParameters instance = null; private static object lockObject = new object(); private int _firstvalue, _secondvalue; /// <summary> /// 私有化构造函数,防止外部实例化 /// </summary> private SingletonParameters(int first, int second) { this._firstvalue = first; this._secondvalue = second; } public static SingletonParameters InstanceParameters(int first, int second) { if (instance == null) { lock (lockObject) // 线程同步锁 { if (instance == null) // Lazy Initialization { instance = new SingletonParameters(first, second); } } } else { instance.FirstValue = first; instance.SecondValue = second; } return instance; } public int FirstValue { get { return _firstvalue; } set { _firstvalue = value; } } public int SecondValue { get { return _secondvalue; } set { _secondvalue = value; } } /// <summary> /// 重置 Singleton /// </summary> public void Reset() { instance = null; } }
测试代码:
var instance1 = SingletonParameters.InstanceParameters(1, 2); Console.WriteLine($"FirstValue:{instance1.FirstValue}"); Console.WriteLine($"SecondValue:{instance1.SecondValue}"); var instance2 = SingletonParameters.InstanceParameters(3, 4); Console.WriteLine($"FirstValue:{instance2.FirstValue}"); Console.WriteLine($"SecondValue:{instance2.SecondValue}"); Console.WriteLine($"instance1 == instance2 : {instance1 == instance2}");
参考:https://www.cnblogs.com/gaochundong/p/design_pattern_singleton.html
这篇关于Singleton 单例模式简介与 C# 示例【创建型】【设计模式来了】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#