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