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