【注意】最后更新于 December 15, 2017,文中内容可能已过时,请谨慎使用。
本文来看一看java设计模式之单例模式。
在打王者荣耀呢,遇到了一个很有意思的队友,你还想跟他再来几局solo下,看看谁才对得起万年偷塔韩跳跳的称号!
假设这个是你的队友吧。
1
2
3
4
5
6
7
8
|
package top.txiner.singleton;
public class Gamer {
public void getInfo() {
System.out.println("I am HanXin ");
}
}
|
在伟大的王者峡谷召唤他!
1
2
3
4
5
6
7
8
|
package top.txiner.singleton;
public class Valley {
public static void main(String[] args) {
Gamer gamer=new Gamer();
gamer.getInfo();
}
}
|
这下我不用说也知道了,每次叫的不一定是他了,而是一个新的对象!
那怎么办?就不让他给分配新的对象了呗!
产生了新的对象就保存住!不再产生新的!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package top.txiner.singleton;
public class Gamer {
private static Gamer gamer=null;
private Gamer(){}
public static Gamer getInstance(){
if (gamer==null){
gamer=new Gamer();
}
return gamer;
}
public void getInfo() {
System.out.println("I am HanXin ");
}
}
|
很完美!
这下记录住了,以后跟你solo的一定就是你要的那个韩跳跳了!
突然,又一次,你发现就在你要跟这个韩跳跳玩的时候,就在系统创建的那万分之一秒的时候,又有一个玩家也要跟他挑战,以迅雷不及掩耳盗铃响叮当之势也创建了出来了。
也就是说
1
2
3
|
if (gamer==null){
gamer=new Gamer();
}
|
你在执行
还没创建好的时候,另一个人执行到了
肯定也是对的,他也创建了一个!
完了,肯定不是一个人了!
一怒之下,在创建这个Gamer的时候就把对手韩信创建出来!
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package top.txiner.singleton;
public class Gamer {
private static Gamer gamer=new Gamer();
private Gamer(){}
public static Gamer getInstance(){
return gamer;
}
public void getInfo() {
System.out.println("I am HanXin ");
}
}
|
恩,世界太平了!
-------------------分割线-------------------
实际上单例模式有很多中创建方案,包括本文中说过了懒汉模式,饿汉模式,还有静态内部类,枚举,双重校验锁等内容!
由于饿汉模式已经解决了内存不安全的问题,我就不再进行解释了!