单例模式(泛型表⽰法)
下⾯是单例模式的泛型表⽰形式,主要思路是利⽤泛型单例提供者类中的单例创建者类结合来实现,相关的说明在代码中已注释,不懂的可以留⾔。 以下只是泛型单例的⼀种实现⽅式,还可以有其他多种实现,不过本⼈觉得这种⽅式⽐较简单易懂点。
单例模式的要点是:确保⼀个类只有⼀个实例,并提供对该实例的全局访问。
1using System;
2using System.Collections.Generic;
3using System.Diagnostics;
4using System.Linq;
5using System.Text;
6using System.Threading;
7using System.Threading.Tasks;
8
9namespace MyExamples.App
10 {
11///<summary>
12///泛型单例提供者类(或称单例⼯⼚),根据T类型创建相应的实例对象;
13/// new():表明T类型能够被实例化。
14///</summary>
15///<typeparam name="T"></typeparam>
16public class SingletonProvider<T> where T : new()
17 {
18///<summary>
19///私有构造函数:使⽤ private 修饰符来清楚地表明该类不能被实例化
20///</summary>
21private SingletonProvider()
22 {
23 }
24
25///<summary>
26///定义⼀个公开的静态的属性,提供外部程序调⽤;
27///</summary>
28public static T Instance
29 {
30get
31 {
32
33return SingletonCreator.instance;
34 }
35 }
36
37///<summary>
38///单例创建者类
39///实现原理是:利⽤只读字段与静态构造函数的特点来实例化⼀个唯⼀的对象;
40///静态构造函数⼀旦被某个线程执⾏,其他线程则不能再调⽤,获取T类型实例时,直接返回静态只读的instance;
41///</summary>
42private class SingletonCreator
43 {
44///<summary>
45///只读字段:只能在静态构造函数或初始化时赋值
46///</summary>
47internal static readonly T instance;
48
49///<summary>
单例模式的几种实现方式50///静态构造函数仅调⽤⼀次
51///</summary>
52static SingletonCreator()
53 {
54 SingletonProvider<T>.SingletonCreator.instance = new T();
54 SingletonProvider<T>.SingletonCreator.instance = new T();
55 }
56 }
57 }
58
59class Program
60 {
61static void Main(string[] args)
62 {
63for (int i = 0; i < 100; i++)
64 {
65var thread = new Thread(new ThreadStart(Run));
66 thread.Start();
67 }
68 Console.Read();
69 }
70
71static void Run()
72 {
73 Console.WriteLine(SingletonProvider<MyJob>.Instance.Write());
74 }
75 }
76
77public class MyJob
78 {
79private string _timeSpan;
80
81public MyJob()
82 {
83 _timeSpan = DateTime.Now.Millisecond.ToString();
84 }
85
86public string Write()
87 {
88//Debug.WriteLine(_timeSpan);
89return _timeSpan;
90 }
91 }
92 }
源代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论