写的很不错的单利模式,还考虑了线程安全的问题的博客:******
https://blog.csdn.net/jo__yang/article/details/52117031
![](https://i-blog.csdnimg.cn/blog_migrate/013bc1ce1e83bbaa1bfd8d293d3ad534.png)
饿汉式:
![](https://i-blog.csdnimg.cn/blog_migrate/b6632f2cc88008c0b5ef5fbf23244f8c.png)
非线程安全式的懒汉式:
![](https://i-blog.csdnimg.cn/blog_migrate/4e36bbde52bf08052941359ce0b3d425.png)
4.高效的线程安全的懒汉式(而且保证了线程有序性)
![](https://i-blog.csdnimg.cn/blog_migrate/02dd05ca2cfeaa014bf57e44d9afe2e0.png)
5.内部类式
![](https://i-blog.csdnimg.cn/blog_migrate/ffdd83dcfa8ecb2f3a5532187e0beaa6.png)
枚举类(里面每个静态对象在类创建之后只用一次,所以是安全的?)
![](https://i-blog.csdnimg.cn/blog_migrate/fce9857c280d260e7ecdf607a427943e.png)
线程安全的
如何实现单例模式:
1.把这个类的构造方法变成private(这样就不能new这个类);
2.静态地构造类的对象(可以让它立刻引用,这就是饿汉模式;也可以后面引用,就是懒汉模式)
3.构造一个静态方法返回第二步的对象(如果是懒汉模式,就在这一步把第二步未完成的实例化对象给完成);
![](https://i-blog.csdnimg.cn/blog_migrate/d3c36de4b17e0a72afc0099542fa7d80.png)
如果是懒汉模式:
在public static GiantDragon getInstance(){
if(instance==null){//先判断实例是否为空
instance=new GiantDragon(); //为空就实例化,而不是像饿汉模式无论是否为空都进行实例化;
}
return instance;
}