单例设计模式是指,单例对象的类,只允许实例一个对象,这样,在jvm堆内存中,就只开辟了一块空间来存储这个对象,这种设计的优点是避免了内存中空间的浪费,避免频繁的创建销毁对象,为整个系统提供一个全局的访问的。打比方,windows桌面,我们已经点开了一个回收站,当我们再点击一次回收站的时候,不会再弹出一个回收站的弹窗。
饿汉式
class Singleton{
//私有化构造函数,让外部不能创建这个类的对象
private Singleton (){}
//实例化这个类,并且使用static关键字,是在类加载到内存的
//时候就初始化,实例化这个类,使用final关键字,是代表这个变量的值
//是不能变的了。
private static final Singleton singleton= new Singleton();
//对外暴露一个接口,使用static关键字修饰这个方法,代表是
//类名直接调用这个方法。
public static Singleton getInstance(){
return singleton;
}
}
懒汉式
class Singleton{
private Singleton(){}
private static final Singleton singleton=null;
public static Singleton getInstance(){
if(singleton==null){
syschronized(Singleton.class){
if(singleton==null){
singleton=new Singleton();
}
}
}
return singleton;
}
饿汉式 ,线程不是安全的,当有多个线程运行的时候,可能会出现线程安全问题,导致数据不正确,但是正因为如此,他的效率是更高的。懒汉式,是线程安全的,因为加了syschronized锁,所以每次实例化对象要判断锁,所以他的效率低。开发中一般用饿汉式。