如果乙個類始終只能建立乙個例項,則這個類被稱為單例類。
在一些特殊的場景下,要求不允許自由建立該類的物件,而是只允許為該類建立乙個物件。為了避免其他類自由建立該類的例項,我們把該類的構造器使用private修飾,從而把該類的所有構造器隱藏起來。
根據良好封裝的原則:一單把該類的構造器隱藏起來,則需要提供乙個public方法作為該類的訪問點,用於建立該類的物件,且該方法必須使用static修飾(因為呼叫該方法之前還不存在物件,因此呼叫該方法的不可能是物件,只能是類)。
除此之外,該類還必須快取已經建立的物件,否則該類無法知道是否曾經建立過物件,也就無法保證只建立乙個物件。為此該類需要使用乙個屬性來儲存曾經建立的物件,因為該屬性需要被上面的靜態方法訪問,故該屬性必須使用static修飾。
基於上面的介紹,下面程式建立了乙個單例類。
程式如下:
1class
singleton2;
7//提供乙個靜態方法,用於返回singleton例項8//
該方法可以加入自定義的控制,保證只產生乙個singleton物件
9public
static
singleton getintance()
1018
return
instance;
1920}21
22}2324
//測試**
25public
class
testsingleton
2635 }
最簡單的單例模式
1.啥是單例模式?答 單例模式就是乙個類只有乙個例項 2.為啥不用全域性變數來實現呢?答 因為單例模式既能有全域性變數的優點,可以全域性訪問,但是沒有全域性變數的缺點 3.啥缺點?答 如果我們要在乙個全域性指令碼中放乙個物件,那麼我們要在程式執行前就建立好,如果是開發遊戲,我們要在遊戲執行前建立好這...
單例模式最簡單可靠的寫法
單例模式大家都知道有兩種方式,一種是餓漢式,一種是懶漢式 餓漢式 一開始就初始化例項 public class singleton public static singleton getinstance 懶漢式,記住這種雙重檢查的方式,保證執行緒的安全 public class singleton ...
最普通的單例模式
最近閒來無事,回憶了最簡單的單例模式。經過了乙個小時的嘗試加修改,終於寫好了。下面分享一下我犯傻的地方 ps 這次的單例模式不涉及加鎖之類,只是最基本的單例模式 廢話不多說,先上 includeusing namespace std class singleton private singleton...