设计模式–单例模式
单例模式就是说一个Java类只能new出一个实例对象来,单例模式可以节省内存资源。Windows系统的任务管理器、打印机用就是单例模式实现的,spring也有用到单例模式。
单例模式的实现
单例模式有好几种实现方式,最常用的是懒汉式和饿汉式单例模式
懒汉式:懒汉式是指在调用的时候实例化自己。
代码块
public class Singleton {
private static Singleton instance = null;
//将构造函数私有化确保不能通过new来生成对象
private Singleton(){}
//提供一个对外的获取实例化对象的方法
public static Singleton synchronized getInstance(){
if(null==instance){
instance = new Singleton();//当对象为null的时候,new一个新的对象出来
}
return instance;//返回实例化对象
}
}
上面的类就是一个单例模式实现的类,要想实例化该类,只能调用getInstance方法,关键字synchronized 是为了线程安全。因为在多线程情况下,不同步会有可能产生两个对象。
饿汉式:饿汉式是指在类初始化的时候,就实例化一个对象出来。
public class Singleton_02 {
//在类初始化的时候就实例化一个类的对象
private static Singleton_02 instance= new Singleton_02();
//私有化构造函数
private Singleton_02(){}
//对外提供一个返回类的实例的静态方法
public static Singleton_02 getInstance(){
return instance;
}
}
这是两种最常用的单例模式的实现方法。
两者的区别:
一、懒汉式只有在调用getInstance()方法的时候才会实例化对象,所以相比于饿汉式在创建类的时候就实例化对象来说会节省内存。
二、懒汉式只有在调用getInstance()方法的时候才会实例化对象,相比于饿汉式来说,懒汉式初始化的时候会在性能上存在延迟加载。