Webpack 打包太慢? 試試 Dllplugin
阿新 • • 發佈:2020-12-08
單例模式:一個類只能有一個例項(只能創建出一個物件),為了節省記憶體資源
怎麼保證只有一個例項?
我們知道,當建立一個新物件時,我們會呼叫類的構造方法,建立多個物件,那我們就會呼叫多次構造方法,現在我們要保證只有一個例項,也就是說我們不管建立多少個物件,都只調用一次構造方法,那麼怎麼實現呢?我們可以給構造方法加上private修飾符,這樣構造方法就只能被本類訪問了,其他地方你要建立類物件,要訪問構造方法就會被拒絕,但是這樣的話在其他類要建立物件時就不能使用當前類物件了,所以為了解決這個問題,可以對外提供一個公共方法返回一個物件。
總結一下就是:
-
構造方法私有化
-
對外提供一個公共方法返回一個物件
程式碼實現:
/** * @author PgRightWu * @version 1.0 * @date 2020/12/8 16:42 * @description 單例模式 */ /* * 單例模式步驟 * 1.構造方法私有化 * 2.對外提供公共方法返回一個物件 * */ public class Singleton { // 1.構造私有化 private Singleton(){} // 餓漢式(一開始就建立) private static Singleton s = new Singleton(); // 2.對外提供私有方法保證返回一個物件(因為外部呼叫類的方法要例項化物件,所以用static修飾,可以通過類名呼叫) public static Singleton getSingleton(){ return s; } } class TestSingleton{ public static void main(String[] args) { Singleton s1 = Singleton.getSingleton(); Singleton s2 = Singleton.getSingleton(); Singleton s3 = Singleton.getSingleton(); System.out.println(s1); System.out.println(s2); System.out.println(s3); } }
這樣的話,不管建立多少個Singleton物件,都是指向同一個記憶體地址,也就是隻有一個例項
執行效果:
採用懶漢式實現單例模式,其實也很簡單,懶漢式就是什麼時候用就什麼時候建立物件
實現程式碼:
public class Singleton { // 1.構造私有化 private Singleton(){} // 懶漢式(什麼時候用什麼時候建立) private static Singleton s; // 2.對外提供私有方法保證返回一個物件(因為外部呼叫類的方法要例項化物件,所以用static修飾,可以通過類名呼叫) public static Singleton getSingleton(){ if(s==null) s = new Singleton(); return s; } }
現在我們來聊一聊單例模式餓漢式與懶漢式的區別
- 餓漢式是在類載入時就進行例項化,而懶漢式預設不會例項化,是什麼時候new什麼時候才例項化
- 餓漢式是執行緒安全的,因為在類載入時物件就已經例項化了,而懶漢式不是執行緒安全的,是什麼時候用就什麼時候例項化,這樣當多個執行緒同時需要例項化某個物件時,訪問例項化程式碼,就會生成多個物件,所以是執行緒不安全的(可以通過同步鎖解決)。
- 餓漢式是在類載入時例項化物件,所以會佔用記憶體空間,造成記憶體空間的浪費,而懶漢式是什麼時候用什麼時候例項化物件,相對不會造成記憶體浪費。