一、饿汉式单例
/*
* 单例模式
* */
/*
* 饿汉式单例模式
* */
class Singleton{
/*
* 声明私有静态成员变量singleton。
* */
private static Singleton singleton = new Singleton();
/*
* 私有构造器。
* */
private Singleton(){}
/*
* 静态方法
* 返回私有成员变量singleton.
* */
public static Singleton getInstance(){
return singleton;
}
}
单例即一个类只有唯一一个实例,可以看到我们通过对无参构造器私有化来实现这一点。因为现在的对象已经无法通过new关键字在外部实例化这个类了,我们又定义了私有静态的Singleton 类型的成员变量singleton来引用一个内部new出来的Singleton对象,然后通过一个静态公共方法getInstance()使外部可以获取到内部唯一的Singleton对象。
在饿汉式单例模式中,Singleton类被初始化时就已经实例化了单例对象。
private static Singleton singleton = new Singleton();
二、懒汉式单例
/*
* 懒汉式单例模式
* */
class Singleton{
/*
* 声明私有静态成员变量singleton。
* */
private static Singleton singleton;
/*
* 私有构造器。
* */
private Singleton(){}
/*
* 静态方法
* 返回私有成员变量singleton.
* */
public static Singleton getInstance(){
if(singleton != null){
return singleton;
}else{
return new Singleton();
}
}
}
对照前面饿汉式单例模式,懒汉式单例模式在类初始化时并没有实例化单例对象,而是在调用获取单例对象的静态公共方法时主动创建或返回一个唯一的单例对象。