网上搜到这个资料.
加以修改加工一下,发布.感谢原作者的付出:http://singlewolf.javaeye.com/blog/173877
Singleton类之所以是private型构造方法,就是为了防止其它类通过new来创建实例,即如此,那我们就必须用一个static的方法来创建一个实例(为什么要用static的方法?因为既然其它类不能通过new来创建实例,那么就无法获取其对象,那么只用有类的方法来获取了)
1
class Singleton {
2![]()
3
private static Singleton instance;
4![]()
5
private static String str="单例模式原版" ;
6![]()
7
8![]()
9
private Singleton(){}
10![]()
11
public static Singleton getInstance(){
12![]()
13
if(instance==null){
14![]()
15
instance = new Singleton();
16![]()
17
}
18![]()
19
return instance;
20![]()
21
}
22![]()
23
public void say(){
24![]()
25
System.out.println(str);
26![]()
27
}
28![]()
29
public void updatesay(String i){
30![]()
31
this.str=i;
32![]()
33
34![]()
35
36![]()
37
}
38![]()
39
}
40![]()
41
42![]()
43
public class danli{
44![]()
45
public static void main(String[] args) {
46![]()
47
Singleton s1 = Singleton.getInstance();
48![]()
49
//再次getInstance()的时候,instance已经被实例化了
50![]()
51
//所以不会再new,即s2指向刚初始化的实例
52![]()
53
Singleton s2 = Singleton.getInstance();
54![]()
55
System.out.println(s1==s2);
56![]()
57
s1.say();
58![]()
59
s2.say();
60![]()
61
//保证了Singleton的实例被引用的都是同一个,改变一个引用,则另外一个也会变.
62![]()
63
//例如以下用s1修改一下say的内容
64![]()
65
s1.updatesay("hey is me Senngr");
66![]()
67
s1.say();
68![]()
69
s2.say();
70![]()
71
System.out.println(s1==s2);
72![]()
73
}
74![]()
75
}
76![]()
class Singleton { 2

3
private static Singleton instance; 4

5
private static String str="单例模式原版" ;6

7
8

9
private Singleton(){} 10

11
public static Singleton getInstance(){ 12

13
if(instance==null){ 14

15
instance = new Singleton(); 16

17
} 18

19
return instance; 20

21
} 22

23
public void say(){ 24

25
System.out.println(str); 26

27
} 28

29
public void updatesay(String i){30

31
this.str=i;32

33
34

35
36

37
} 38

39
} 40

41
42

43
public class danli{ 44

45
public static void main(String[] args) { 46

47
Singleton s1 = Singleton.getInstance(); 48

49
//再次getInstance()的时候,instance已经被实例化了 50

51
//所以不会再new,即s2指向刚初始化的实例 52

53
Singleton s2 = Singleton.getInstance(); 54

55
System.out.println(s1==s2); 56

57
s1.say(); 58

59
s2.say(); 60

61
//保证了Singleton的实例被引用的都是同一个,改变一个引用,则另外一个也会变.62

63
//例如以下用s1修改一下say的内容64

65
s1.updatesay("hey is me Senngr"); 66

67
s1.say(); 68

69
s2.say(); 70

71
System.out.println(s1==s2); 72

73
} 74

75
}76

打印结果:
true
单例模式原版
单例模式原版
hey is me Senngr
hey is me Senngr
true
private static Singleton instance;
public static Singleton getInstance()
这2个是静态的
1.定义变量的时候是私有,静态的:private static Singleton instance;
2.定义私有的构造方法,以防止其它类通过new来创建实例;
3.定义静态的方法public static Singleton getInstance()来获取对象.instance = new Singleton();


浙公网安备 33010602011771号