设计模式 - 单例模式 Singleton Pattern - C#

2022/6/3 5:20:18

本文主要是介绍设计模式 - 单例模式 Singleton Pattern - C#,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

单例模式 Singleton Pattern

1、单例模式设计模式属于创建型模式

2、是单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

3、意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

4、主要解决:一个全局使用的类频繁地创建与销毁。

 

方式一:双 if Lock

 1 namespace SingletonPattern
 2 {
 3     /*
 4      * 私有化构造函数
 5      * 私有化静态变量
 6      * 使用一个静态的对象实例化
 7      */
 8     public class Singleton
 9     {
10         private static Singleton? _Singleton = null;
11         private static readonly object SingletonLock = new();
12 
13         //让构造函数为 private
14         private Singleton()
15         {
16             Console.WriteLine("实例化了对象");
17         }
18         
19         public static Singleton CreateInstance()
20         {
21             if (_Singleton == null) //当对象不为 null 时,不需要再走 if 内的代码
22             {
23                 lock (SingletonLock)
24                 {
25                     if (_Singleton == null)  //保证对象为 null 才 new
26                     {
27                         _Singleton = new Singleton();
28                     }
29                 }
30             }
31             return _Singleton;
32         }
33 
34         public void Show()
35         {
36             Console.WriteLine("{0} Show", this.GetType().Name);
37         }
38     }
39 }

 

方式二:静态构造函数

 1 namespace SingletonPattern
 2 {
 3     /*
 4      * 静态构造函数方式
 5      */
 6     public class Singleton2
 7     {
 8         private static readonly Singleton2 _Singleton2;
 9 
10         //让构造函数为 private
11         private Singleton2()
12         {
13             Console.WriteLine("实例化了对象");
14         }
15 
16         /// <summary>
17         /// 静态构造函数  由 CLR 保证在第一次使用类之前被调用
18         /// </summary>
19         static Singleton2()
20         {
21             _Singleton2 = new Singleton2();
22         }
23 
24         public static Singleton2 CreateInstance()
25         {
26             return _Singleton2;
27         }
28 
29         public void Show()
30         {
31             Console.WriteLine("{0} Show", this.GetType().Name);
32         }
33     }
34 }

 

方式三:静态变量初始化

 1 namespace SingletonPattern
 2 {
 3     /*
 4      * 静态变量初始化方式
 5      * 静态变量特点:第一次使用时初始化一次,且不会被回收
 6      */
 7     public class Singleton3
 8     {
 9         private static readonly Singleton3 _Singleton3 = new();
10 
11         //让构造函数为 private
12         private Singleton3()
13         {
14             Console.WriteLine("实例化了对象");
15         }
16 
17         public static Singleton3 CreateInstance()
18         {
19             return _Singleton3;
20         }
21 
22         public void Show()
23         {
24             Console.WriteLine("{0} Show", this.GetType().Name);
25         }
26     }
27 }

 

使用:

1 Singleton singleton = Singleton.CreateInstance();
2 singleton.Show();
3 
4 Singleton2 singleton2 = Singleton2.CreateInstance();
5 singleton2.Show();
6 
7 Singleton3 singleton3 = Singleton3.CreateInstance();
8 singleton3.Show();

 



这篇关于设计模式 - 单例模式 Singleton Pattern - C#的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程