一、所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得某对象实例的方法。
二、单例模式的两种方式
1. 饿汉式:只要类加载就会创建该单例对象,比如在其他情况下(使用了该类的其他静态成员或子类类加载触发了该父类类加载,就会导致未使用该对象,就已经创建好了的状况)。
public class Cat {
//2.在内部直接创建一个对象
private static final Cat cat = new Cat();
//1.私有化构造器
private Cat(){}
//3.提供一个静态方法,用来返回内部创建的对象
public static Cat getInstance(){
return cat;
}
}
2. 懒汉式:类加载时,只是将定义的静态变量初始化为null,并不会创建对象。当第一次调用该静态方法时,才会创建该单例对象。
public class Cat {
//2.内部声明一个该类型的变量,并不着急创建对象
private static Cat cat = null;
//1.私有化构造器
private Cat(){}
//3.提供一个静态方法,判断如果声明的该变量为null,则创建,否则return该变量
public static Cat getInstance(){
if (cat == null){
cat = new Cat();
}
return cat;
}
}
三、饿汉式VS懒汉式
1. 二者主要区别在于创建对象的时机不同,饿汉式是在类加载就创建对象实例,而懒汉式是在使用时才创建。
2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
3. 饿汉式存在浪费资源的可能,因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了。懒汉式是使用时才创建,不存在此问题。
4. java.lang.Runtime就是经典的饿汉式单例模式.