单例模式有两种比较常见的实现方式:饿汉式&懒汉式
1.懒汉式
public class Test {
public static void main(String[] args) throws MyException {
Singletest sin1 = Singletest.getins();
Singletest sin2 = Singletest.getins();
System.out.println(sin1 == sin2);
}
}
// 单例模式之饿汉模式
class Singletest{
private Singletest(){
}
private static Singletest ins = new Singletest();
public static Singletest getins(){
return ins;
}
}
这种实现思路主要是封装和静态变量,在了解这两方面的知识后能很好地体会这个手法。
2.懒汉式
//单例模式之懒汉模式
class Lazy{
private Lazy(){};
private static Lazy ins = null;
public static Lazy getins(){
if(ins == null){
ins = new Lazy();
}
return ins;
}
}
总结:
两种方法大体上基本一致,对构造器的私有化,创造静态对象,以及开放的对象获取。我比较欣赏懒汉式的一点是,它没有主动去构造对象,在内存空间比较吃紧的情况下不失为比较可取的方法。
但需要注意的是,饿汉式是天然线程安全的,懒汉式在没有做多余处理的情况下是线程不安全的。