应用执行过程当中,只有一个对象的模式,叫做单例模式
1.构造器私有
2.提供可以获得对象的静态方法
3.将对象设置为静态
懒汉模式:用的时候再创建
饿汉模式: 加载的时候就创建
public class Singleton {
private Singleton(){
}
// 构造器私有,无法在外部实例化这个对象
// 外部一千一万个对象也都只能是对Person内部newperson对象的引用。
// 因为外部定义的Person类对象没有实例化能力。这就是单例设计模式,从头至尾只有一个对象的实例(单例)
//饿汉模式 当类加载时 对象就已经被创建好了
// public static Singleton single=new Singleton();//静态变量
// public static Singleton getSingle(){//静态方法,
// return single;
// }
//懒汉模式 需要时再创建对象
public static Singleton single=null;
public static Singleton getSingle(){
//当single为空时,new一次对象
if(single==null){
single=new Singleton();
}
//如果single不为空,直接返回当前对象,保证操作的对象只有一个
return single;
}
}
懒汉模式可能产生的问题:线程不安全 解决方案:在方法上加锁或者在字节码上加锁(推荐)
优点:延迟加载
饿汉模式可能产生的问题: 浪费内存空间
优点: 线程安全
单例模式可能产生的问题: 成员变量是共享的 线程不安全