單例設計模式

分析:

    1.爲了限制多個實例化對象的產生,我們使用private修飾構造方法,private 修飾符的特點是,當某方法被private修飾,外部類無法調用該方法,該方法只能被本類調用。所以當使用private 關鍵字修飾了本類的構造方法後,構造方法私有化,無法從外部進行構造方法的調用。此時,在不改變本類的情況下,如何能讓外部類得到該實例化對象?

    2.解決的辦法是:在本類中實例化好該對象instance,此時內部聲明的instance屬性屬於一個普通屬性,訪問該屬性,就必須先實例化好本對象,然後通過本對象訪問該屬性,但現在外部無法實例化對象,此時我們考慮static關鍵字,因爲static不受實例化對象的控制。此時我們就以使用static 關鍵字來修飾該屬性。

    3.類中的屬性一般都要使用private關鍵字進行封裝,當我們使用private 關鍵字封裝該屬性後,就需要提供靜態公有方法,讓外部類通過該靜態方法得到實例化對象。

    4.但我們發現,上面的做法雖然限制了從外部類直接實例化對象,但通過本類,依然可以實例化多個對象,因此我們進一步使用final關鍵字修飾該instance屬性,以此達到對象只能被實例化一次的目的。

單例模式的核心思想在於:構造方法私有化,外部無法產生新的實例化對象,只能通過類提供的static 方法取得唯一的一個對象的引用,不管外部聲明瞭多少了對象,但實際只存在一個實例化對象。

其內存圖如下圖所示:

 

 

//單例設計模式

class Singleton{

private static final Singleton INSTANCE = new Singleton(); //實例化私有對象

public static Singleton getInstance(){   //提供訪問該私有化對象的靜態方法

return INSTANCE;

}

private Singleton(){} //構造方法私有化

public void sayTo(){

System.out.println("我是單例模式");

}

}

public class SingletonTest{

public static void main(String[] args){

 Singleton instA = null; //聲明對象

 Singleton instB = null;

 Singleton instC = null;

 instA = Singleton.getInstance(); //拿到私有化對象

 instA.sayTo();                 //調用sayTo()方法

 instB = Singleton.getInstance();

 instB.sayTo();

 instC = Singleton.getInstance();

  instC.sayTo(); 

}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章