单例模式是最简单的设计模式之一,shu'yu创建型模式,提供了一种创建对象的最佳方式
单例模式:
1、单例模式只能由一个实例
2、单例模式必须自己创建自己的唯一实例
3、单例模式必须给其他所有对象提供这一实例
饿汉式:
类一旦加载就把单例初始化完成,保证getInstance的时候,单例是已经存在的了。
不是lazy初始化,是多线程安全的,比较常用,但是容易产生垃圾对象,优点是没有加锁,执行效率会提高。缺点是类加载时就初始化,浪费内存。
public class SingletonEH {
private static SingletonEH instance = new SingletonEH();
private SingletonEH (){}
public static SingletonEH getInstance() {
System.out.println("instance:"+instance);
System.out.println("加载饿汉式....");
return instance;
}
}
懒汉式:
比较懒,只有当调用getInstance的时候,才初始化这个单例。
是Lazy初始化,非多线程安全,是最基本的实现方式,但是问题是不支持多线程,因为没有加锁,所以一般另外加锁,执行效率低。
public class SingletonLH {
private static SingletonLH instance;
private SingletonLH (){}
public static SingletonLH getInstance() {
if (instance == null) {
instance = new SingletonLH();
}
return instance;
}
}