单例模式是指,在代码运行时,保证某一个类只能被创建一个对象,不可以被创建第二次对象。
饿汉式:
1.先将类中的构造器私有化,用private修饰,防止在外界创建对象
例:
private Test(){}
2.在类中创建一个私有对象,用静态修饰,以便类中的静态方法调用(静态方法只能调用静态属性),并且只有这一个对象
例:
private static Test t = new Test();
3.在类中创建一个公有的静态方法(方便外界直接用类名调用),返回值为2中的对象,方法名一般为getInstance(实例化的意思)
public static Test getInstance(){
return t;
}
4.在外界中不能创建对象,因为构造器私有化,但是可以用类名调用getInstance方法来调用类的唯一对象,并且即使不调用对象,只要类被加载,唯一对象就已经创建好了。这就是单例模式的饿汉式
懒汉式:
1.同样在类中创造私有化构造器,用private修饰,防止在外界创建对象
private Test(){}
2.在类中定义一个私有化分静态对象,但是并不为它赋值,也就是不new,这是它的值默认为null
private static Test t;
3.定义一个公有的静态getInstance方法,返回值同样为2中的对象,但是这次方法中要做一个判断,如果对象t为空,也就是t==null,那么就为这个对象赋值
public static Test getInstance(){
if(t == null){
t = new Test();
}
return t;
}
4.懒汉式是只有在调用方法时,才会创建对象。、
区别:
1.饿汉式和懒汉式的主要区别就是创建对象的时机不同。饿汉式只要类被加载就会创建对象实例化,而懒汉式只有在被使用时才会创建对象
2.饿汉式不存在线程安全问题,而懒汉式存在线程安全问题(同时有好几个线程加载时可能会冲突,同时创建好几个对象)
3.饿汉式存在浪费资源的可能,假如程序员没有使用实例化对象,那么饿汉式创建的对象就浪费了,而懒汉式是使用时才会创建对象,所以不存在这个问题。