1、饿汉式单例
/* * 单例模式 * */ /* * 饿汉式单例模式 * */ 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对象。java
在饿汉式单例模式中,Singleton类被初始化时就已经实例化了单例对象。spa
private static Singleton singleton = new Singleton();
2、懒汉式单例
/* * 懒汉式单例模式 * */ class Singleton{ /* * 声明私有静态成员变量singleton。 * */ private static Singleton singleton; /* * 私有构造器。 * */ private Singleton(){} /* * 静态方法 * 返回私有成员变量singleton. * */ public static Singleton getInstance(){ if(singleton != null){ return singleton; }else{ return new Singleton(); } } }
对照前面饿汉式单例模式,懒汉式单例模式在类初始化时并无实例化单例对象,而是在调用获取单例对象的静态公共方法时主动建立或返回一个惟一的单例对象。code