单列模式就是某个类只存在一个对象(即只能new一次),当某个类的初始化比较费时,费资源的时候,一般就会选择单列模式,我看了篇博文就顺便实现了下:
//懒汉方式创建单列,在获取单列对象处修改保证线程安全,提供static方法来获取单列对象
class Singleton{
private static Singleton s=null;//内部创建单列的对象的引用
//将该类的构造方法设置为私有是单列的本质
private Singleton(){
System.out.println("懒汉方式单列实现");
};
//获取单列类的对象方法,此处必须设置为static,因为单列不能在该类外部实例化,需要用类名直接访问
//这里加了synchronized关键字是为了保证线程安全
public static synchronized Singleton getInstance(){
if(s==null)//若引用为空,则new出一个对象
s=new Singleton();
return s;
}
}
//饿汉式创建单列,在单列对象实例化时使用final关键字保证线程安全,都需要提供static方法获取单列对象
class Singleton1{
private Singleton1(){
System.out.println("饿汉式创建单列");
}
private static final Singleton1 single=new Singleton1();
public static Singleton1 getInstance1(){
//这里因为已经在该类的内部实例化完毕,无需再进行if判断,可以直接返回单列对象供外部获取
return single;
}
}
public class TestSingleton {
public static void main(String[] args) {
// TODO Auto-generated method stub
Singleton.getInstance();
Singleton1.getInstance1();
}
}