单例模式解决某个类频繁创建与销毁。该模式保证其创建的对象在JVM中只有一个实例对象存在,并且提供一个访问该实例的全局访问点。前提是:必须保证私有化构造函数且只能有一个实例对象存在。
单例模式实现过程:
1)将该类的构造函数私有化(目的是禁止其他程序创建该类的对象, 避免反射创建实例, 可以在构造函数中增加判定是否已存在一个实例);
2)在本类中自定义一个对象(已经禁止其他程序创建该类的对象,则必须自己创建一个供程序使用,否则该类无法使用,更不是单例);
3)提供一个可访问类自定义对象的类成员方法(对外提供该对象的访问方式,由于该类不可再次创建对象,则只能通过类调用,所以创建static方法)。
优点:减少new关键字的使用,降低系统内存的使用频率,同时减轻GC工作;
避免了资源的多重使用。
缺点:不可继承,没有接口。
二、分类 1、饿汉式优点:线程安全,没有加锁同步,执行效率高, 不延迟加载。
缺点:当类加载时就初始化,没有懒加载,浪费内存,通过classloader机制避免了多线程的同步问题
1 /** 2 * 恶汉单例模式,当类加载时进行初始化,没有懒加载,浪费内存 3 */ 4 public class HungrySingleton { 5 private static HungrySingleton instance = new HungrySingleton(); 6 /** 7 * 构造函数必须私有化 8 */ 9 private HungrySingleton(){ 10 11 } 12 13 /** 14 *提供一个静态方法获取实例 15 * @return 16 */ 17 public static HungrySingleton getInstance(){ 18 return instance; 19 } 20 }