单件模式:
显而易见,单件模式就是只有一个,并且通过私有构造器的方式不能被继承(继承了就不是正真意义上的单件了),在这一点上和静态类是一致的,但是还是有区别的主要是以下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
}
/// <summary>2
/// 简单的单件模式3
/// </summary>4
public class Singleton5
{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 Program32
{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
else42
Console.WriteLine("我们两个是不相同的实例!");43

44
sin.ShowInfo();45
sin2.ShowInfo();46
Console.Read();47
}48
}


浙公网安备 33010602011771号