单例模式应该是相当常见的一个设计模式,如web开发中每个servlet都是一个单例,spring框架bean管理很多时候我们都将一些组件类作为单例实例化。
之所以使用单例,是因为实例能够重复使用,实例化需要太多的资源,又或者要保持实例的唯一性(例如一个国家只能有一个皇帝)。
单例有懒汉式和饿汉式,这其实是根据实例化的时机区分的。
饿汉式
如其名,饿汉看到食物都是’相见恨晚‘的,直接扑过去吃的,所以很’急‘,在启动时便实例化。
public class Hungry {
private static ArrayList list;
static{
list = new ArrayList();
}
public static ArrayList getArrayListInstance(){
return list;
}
}
懒汉式
懒汉式是使用的时候才实例化,所以很懒
public class Lazy {
private static ArrayList list;
public static ArrayList getListInstance(){
if(list == null){
synchronized (Lazy.class) {
if(list == null){
list = new ArrayList();
}
}
}
return list;
}
}