单件模式:
显而易见,单件模式就是只有一个,并且通过私有构造器的方式不能被继承(继承了就不是正真意义上的单件了),在这一点上和静态类是一致的,但是还是有区别的主要是以下2点:
- 初始化时间,静态类在编译时初始化,单件类在需要时再初始化
- 静态类没有构造器,但是单件有一个一次性的构造器,可以根据不同情况进行一次性的复杂构造
当某个类并不需要由构造器初始化并且不在乎初始化的时间时,2者可以混用!
以下是单件模式的Demo:
1 /// <summary>
2 /// 简单的单件模式
3 /// </summary>
4 public class Singleton
5 {
6 private string name;
7 private int age;
8 private static Singleton sin = null;
9
10 //私有构造器
11 private Singleton(string name,int age)
12 {
13 this.name = name;
14 this.age = age;
15 }
16
17 public static Singleton GetSingleton(string name, int age)
18 {
19 if (sin == null)
20 sin = new Singleton(name,age);
21 return sin;
22 }
23
24 public void ShowInfo()
25 {
26 Console.WriteLine(string.Format(@"你好,我是单件,我叫{0},年龄:{1}岁", name, age));
27 }
28 }
29
30
31 class Program
32 {
33 static void Main(string[] args)
34 {
35 Singleton sin = Singleton.GetSingleton("王老五",55);
36 //第二次无效了
37 Singleton sin2 = Singleton.GetSingleton("比尔 盖兹",45);
38
39 if (sin.Equals(sin2))
40 Console.WriteLine("我们两个是相同的实例!");
41 else
42 Console.WriteLine("我们两个是不相同的实例!");
43
44 sin.ShowInfo();
45 sin2.ShowInfo();
46 Console.Read();
47 }
48 }
2 /// 简单的单件模式
3 /// </summary>
4 public class Singleton
5 {
6 private string name;
7 private int age;
8 private static Singleton sin = null;
9
10 //私有构造器
11 private Singleton(string name,int age)
12 {
13 this.name = name;
14 this.age = age;
15 }
16
17 public static Singleton GetSingleton(string name, int age)
18 {
19 if (sin == null)
20 sin = new Singleton(name,age);
21 return sin;
22 }
23
24 public void ShowInfo()
25 {
26 Console.WriteLine(string.Format(@"你好,我是单件,我叫{0},年龄:{1}岁", name, age));
27 }
28 }
29
30
31 class Program
32 {
33 static void Main(string[] args)
34 {
35 Singleton sin = Singleton.GetSingleton("王老五",55);
36 //第二次无效了
37 Singleton sin2 = Singleton.GetSingleton("比尔 盖兹",45);
38
39 if (sin.Equals(sin2))
40 Console.WriteLine("我们两个是相同的实例!");
41 else
42 Console.WriteLine("我们两个是不相同的实例!");
43
44 sin.ShowInfo();
45 sin2.ShowInfo();
46 Console.Read();
47 }
48 }