設計模式2 單例模式

2022-07-25 13:12:28 字數 1518 閱讀 7439

單例模式解決的問題就是:保證乙個類只能例項化乙個物件。

一般我們保證乙個類只有乙個例項化物件時,做法是:

public class car

}

如果這個brake物件不是僅供這乙個car類使用類呢?這樣做只保證了在乙個car物件有乙個brake,多個car物件或者其他使用brake的類例項就會有多個brake出現了(當然這裡的例子不好,本來就是一輛車子乙個剎車)。所以我們不能把 保證只有乙個例項的權利交給別人,應該讓類自己來保證只例項化乙個物件。

目前有這樣幾類方法:

懶漢法

懶漢法就是等到你需要乙個單例例項的時候,我才會去例項化乙個物件來給你。

public final class singleton;

public static singleton getsingleton()

}

餓漢法

餓漢法是先幫你例項化乙個物件,你需要的時候就向我拿。餓漢法有如下幾種實現方法:

下面這種方法是最簡單也是最好理解的,但是在多執行緒的情況存在安全隱患。

public final class singleton;

public static singleton getsingleton()

}

下面這種方法利用了類在初始化時通過方法按**位置順序執行類中靜態成員變數的例項化和**塊的原理。類在例項化時通過方法按**位置先執行成員變數的例項化和**塊**,在執行構造方法。而且方法只會執行一次(在多執行緒的情況下也只會執行一次),所以在多執行緒情況下是安全的。

public final void singleton

private singleton(){};

public static singleton getsingleton()

}

下面這種方式是以enum(列舉)的方式實現,它是實現單例模式的最佳方式。這種實現方式在多執行緒,序列化情況下依舊是安全的。

public enum singleton
雙檢鎖

雙檢鎖是考慮到多執行緒的懶漢法。

public final class singleton;

private static singleton getsingleton()

}return singleton;

}}

要點

保證單例的構造方法為private,這樣就不能通過new來例項化單例(當然通過反射還是可以例項化多個物件)

保證單例是不能被繼承的。

保證在獲得單例例項的函式返回例項之前例項化例項。

控制資源的使用,通過執行緒同步來控制資源的併發訪問

控制例項的產生,以達到節約資源的目的

控制資料的共享,在不建立直接關聯的條件下,讓多個不相關的程序或執行緒之間實現通訊

設計模式 2 單例模式

單例模式,也是非常好理解的一種設計模式。單例,也叫單件,目的是為了保證乙個類只有乙個例項。當然,沒使用上單例模式的時候,在 實現時候,注意不要隨便new某個物件,這 的確可以,但很不安全。因此簡單 一處理,乙個單例模式便出來了。using system using system.collection...

設計模式2 單例模式

確保乙個類中只有乙個例項,自行例項化並向整個系統提供這個例項,這個類被稱為單例類,它提供全域性的訪問方法 在類中只有乙個例項,並提供乙個靜態的getinstacne 方法用於外界唯一訪問這個例項 防止在外部對其實例化,建構函式私有化 在單例類內部定義了乙個singleton型別的靜態物件,作為外部共...

設計模式2 單例模式

單例模式 只能建立乙個例項化物件,屬於建立型模式 注 該類私有構造方法 該類只能自己建立自己的例項 實現方式有5種,分別是惡漢模式 懶漢模式,雙檢鎖 雙重校驗鎖,匿名內部類和列舉 public class singleton public static singleton getinstance 只...