1. 程式人生 > >構造私有化和單例設計模式

構造私有化和單例設計模式

靜態方法 內部 size 外部 定義 oid data 常用 out

以下的代碼對構造方法進行了私有化封裝,但這樣封裝後我們在類外需要實例化對象是會出現錯誤,因為構造方法是私有的,所以無法實例化。

1 class Singleton{
2     private Singleton() {}
3     public void print() {
4         System.out.println("hello world");
5     }

既然在外部不能實例化對象,我們可以在類的內部實例化對象。

 1 class Singleton {
 2 // 在類的內部進行實例化對象
 3     private static Singleton instance = new
Singleton(); 4 // 獲得instance屬性 5 public static Singleton getInstance() { 6 return instance; 7 } 8 private Singleton() {} // 對構造函數進行了私有化封裝 9 10 public void print() { 11 System.out.println("hello world"); 12 } 13 }

也因為外部不能實例化對象,我們如果要使用instance屬性,就應該把它定義為static類型,此時我們就可以在外部調用

getInstance()方法來實例化Singleton類型對象了。但這樣做有什麽用了,但我們實例化多個Singleton對象時,可以看到,s1s2s3其實指向的是同一個Singleton對象。

1 public class DataTest {
2     public static void main(String args[]) {
3         Singleton s1 = Singleton.getInstance();
4         Singleton s2 = Singleton.getInstance();
5         Singleton s3 = Singleton.getInstance();
6 } 7 }

技術分享圖片

也就是說不管外部聲明了多少個Singleton對象,最終結果都是通過調用getInstance()方法取得的實例化對象,即s1s2s3實際上都使用了一個對象的引用:instance

那麽這樣的設計在設計模式上來講叫做單例設計模式(單態設計模式)。

單例設計模式的核心是將類的構造方法私有化,之後在類的內部產生實例化對象,並通過類的靜態方法返回實例化對象的引用。

如果現在不希望一個類產生過多的對象時,就可以采用單例設計模式。這在Java支持的類庫中會經常用到。

技術分享圖片

構造私有化和單例設計模式