單例模式
我們首先提出的疑問是什麼是單例模式,為什麼需要單例模式?
比如有的時候我們對一些物件只用乙個,比如執行緒池。快取等等。如何保障乙個例項的執行呢?
或許我們可以使用全域性變數,不過全域性變數只能提供全域性訪問,不能確保只有乙個例項。全域性變數一旦多了,通常有的時候我們自己都忘記了。這點深有感觸。看**的時候也是特別的費勁。
單例模式確保乙個類只有乙個例項,並提供乙個全域性訪問點。
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace singleton
}class singleton
public static singleton getinstance()
return uniqueinstance;
}public void display()
}//但是上面的方式有沒有問題呢?
//如果多執行緒的情況下,那麼就會同時進入到getinstance函式中,同樣還是會建立兩個例項。
/// /// 這種方式也為「餓漢」模式,在宣告類的時候就建立物件。
///
class singleton1
public static singleton1 getinstance()
public void display()
}}//要說明的是,利用單例模式,它的建構函式就必須為私有的,那麼私有的建構函式主要作用是??
//還有為什麼使用靜態的就能夠確保只有乙個例項了呢?
小結:要說明的是,利用單例模式,它的建構函式就必須為私有的。幾個知識點的回顧
靜態變數:在類中,用關鍵字static
宣告的為靜態的,特點為:
1、在記憶體中僅占有一塊記憶體。靜態成員是屬於整個類的,而不是屬於某乙個具體的類。
2、其中私有的靜態成員函式不能被類外部函式和物件訪問。
3、在編譯時建立並初始化,也就是在類的任何物件被建立之前就存在。有
static
修飾的就是在編譯時就被分配了記憶體,如
main函式
那麼如果類中只有私有建構函式,則其它類無法建立該物件的例項。宣告空的建構函式為了防止系統呼叫預設的建構函式。因此在上述**中,只有通過getinstance
這個函式才能夠獲得這個物件的唯一例項
uniqueinstance。
Head First設計模式 單例模式
單例模式是所有設計模式中最簡單的模式,也是我們平常經常用到的,單例模式通常被我們應用於執行緒池 快取操作 佇列操作等等。單例模式旨在建立乙個類的例項,建立乙個類的例項我們用全域性靜態變數或者約定也能辦到單例的作用,為什麼我們要用單例模式?接下來我們就從如何形成單例模式,單例模式建立的過程來講解。我們...
Head First 設計模式 5 單例模式
單例模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。用到的設計原則 1 封裝變化 2 組合優於整合 3 針對介面變成而不是針對實現 4 為互動物件之間的松耦合設計而努力 5 類應該對擴充套件開放,對修改關閉 6 依賴抽象,而不是依賴具體類 最簡單的單例 class singleton publ...
單例模式 基於headfirst設計模式的總結
1.經典的單例模式 懶漢式 public class singleton public static singleton getinstance return uniqueinstance other useful methods here 主要的就是3步 1.建立靜態私有變數 2.建立私有構造方法...