1. 程式人生 > 實用技巧 >Leetcode-1. 兩數之和

Leetcode-1. 兩數之和

技術標籤:學習筆記java設計模式單例模式

單例模式:一個類只能有一個例項(只能創建出一個物件),為了節省記憶體資源

怎麼保證只有一個例項?

我們知道,當建立一個新物件時,我們會呼叫類的構造方法,建立多個物件,那我們就會呼叫多次構造方法,現在我們要保證只有一個例項,也就是說我們不管建立多少個物件,都只調用一次構造方法,那麼怎麼實現呢?我們可以給構造方法加上private修飾符,這樣構造方法就只能被本類訪問了,其他地方你要建立類物件,要訪問構造方法就會被拒絕,但是這樣的話在其他類要建立物件時就不能使用當前類物件了,所以為了解決這個問題,可以對外提供一個公共方法返回一個物件。

總結一下就是:

  1. 構造方法私有化

  2. 對外提供一個公共方法返回一個物件

程式碼實現:

/**
 * @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什麼時候才例項化
  • 餓漢式是執行緒安全的,因為在類載入時物件就已經例項化了,而懶漢式不是執行緒安全的,是什麼時候用就什麼時候例項化,這樣當多個執行緒同時需要例項化某個物件時,訪問例項化程式碼,就會生成多個物件,所以是執行緒不安全的(可以通過同步鎖解決)。
  • 餓漢式是在類載入時例項化物件,所以會佔用記憶體空間,造成記憶體空間的浪費,而懶漢式是什麼時候用什麼時候例項化物件,相對不會造成記憶體浪費。