懒汉式
//单例设计模式意味着只有一个实例对象
public class SingleTon{
//私有化全局变量,避免外部直接调用
//4,为了能让对象能直接调用,设置静态方法
private static SingleTon singleTon;
//1,私有构造器,外部无法实例化对象
private SingleTon(){
}
//2,需要给外部提供一个访问实例对象的方法
public static SingleTon getInstance(){
//3,设置一次性实例限制,需要一个全局变量
//若已实例直接返回对象
if(singleTon==null){
//5,考虑到多线程并发问题,有可能多个线程进入,必须给变量SingleTon上锁
synchronized(SingleTon.class){
//线程排队,有可能导致出现多个实例,避免又一次实例,需要双重验证
if(singleTon==null){
singleTon=new SingleTon();
}
}
}
return singleTon
}
}
由于加锁的原因,效率会降低,为此改进,有了饿汉式。
饿汉式
1 public class SingleTon{
2 //在类加载时就进行实例化
3 private static SingleTon singleTon = new SingleTon();
4 private SingleTon(){}
5 public static SingleTon getInstance(){
6 return singleTon
7 }
8 }