前言
在单例模式中,要求只能获取到一个对象,需要保证创建出的对象是唯一的,根据是否按需创建对象,又可分为饿汉式与懒汉式两种,本文用Java实现该模式。
饿汉式
final的使用保证了所创建对象的唯一性。
public class HungrySingleton {
//单例模式-饿汉式
private static final HungrySingleton singleton = new HungrySingleton();
//私有的构造方法
private HungrySingleton(){}
//获取单例对象
public static HungrySingleton getInstance(){
return singleton;
}
//测试用例
public static void main(String[] args){
HungrySingleton singleton1 = HungrySingleton.getInstance();
HungrySingleton singleton2 = HungrySingleton.getInstance();
boolean isEqual = singleton1 == singleton2;
System.out.println("是否为同一实例对象:" + isEqual);
}
}
懒汉式
懒汉式的实现将单例对象的创建放入私有内部类中,只有调用getInstance()方法时才创建该对象。
该模式可节约内存空间,如还可在类中放置其它静态方法,调用时不会创建单例对象。
public class LazySingleton {
//单例模式-懒汉式
private LazySingleton(){}
//当被调用时才会创建单例
private static class SingletonCreation{
private static final LazySingleton lazySingleton = new LazySingleton();
}
//该方法被调用时才会加载内部类
public static LazySingleton getInstance(){
return SingletonCreation.lazySingleton;
}
//测试用例
public static void main(String[] args){
LazySingleton singleton1 = LazySingleton.getInstance();
LazySingleton singleton2 = LazySingleton.getInstance();
boolean isEqual = singleton1 == singleton2;
System.out.println("是否为同一实例对象:" + isEqual);
}
}