单例的意思
一个类永远只存在一个对象,不能创建多个对象。
为什么要使用单例?:开发中有很多类的对象我们只需要一个,例如虚拟机对象,任务管理器对象。对象越多越占内存,有时候我们只需要一个对象就可以实现业务,单例可以节约内存,提高性能!
如何实现单例?:目前有两种实现方式:
饿汉单例模式
(在返回对象的时候,对象已经要做好)
实现步骤:
1.定义一个单例类,将类的构造器私有化,使其不能在类的外部通过new关键字实例化该类对象。
2.在该类内部产生一个唯一的实例化对象,并且将其封装为 private static类型的成员变量,用于存储一个对象。
3.定义一个静态方法返回这个单例的唯一对象。
class SingleIntance01{
//2.定义一个静态成员变量用于存储一个对象!(饿汉单例在返回对象的时候,对象要已经做好)
public staic SingleIntance01 ins=new SingleIntance01();
//1.把构造器私有化,构造器只能在本类中访问
private SingleIntance01{
}
//3.提供一个方法返回单例对象
public static SingleIntance01 getInstance()
{
return ins;
}
}
//判断单例,看对象地址是否一样
public class SingleDemo{
public static void main(String args[])
{
SingleIntance01 s1=new SingleIntance01();
SingleIntance01 s2=new SingleIntance01();
System.out.println(s1==s2);//判断对象是否是同一个
}
}
懒汉单例模式
----通过类单例获取单例对象的时候发现没有对象才去创建一个对象
------实现步骤:
1.定义一个单例类。
2.把类的构造器私有化
3.定义一个静态成员变量用于存储一个对象。
(饿汉单例在返回对象时候,对象已经做好,懒汉单例是这里直接创建出来!)
4.定义一个方法返回单例对象,判断对象不存在才创建一次,存在直接返回!
class SingelIntance02{
//2.定义一个静态成员变量用于存储一个对象!(懒汉单例不能直接创建,必须需要的时候才创建)
public satic SingleIntance02 ins;
//1.把构造器私有化,构造器只能在本类中访问
private SingleIntance02{
}
//3.提供一个方法返回单例对象
public static SingleIntance02 getInstance()
{
if(ins==null)
{
//第一次来取对象,创建一个对象
ins=new SingleIntance02();
}
return ins;
}
}
小结:懒汉单例又叫延迟加载(由于懒汉单例是需要对象时才创建,所以性能比提前创建对象饿汉单例更好,资源占用更少)。