您現在的位置是:首頁 > 運動
C++編寫程式時,如何透過簡單且易懂的單例模式實現出來?
什麼情況下會用到單例模式
單例模式在c++學習中,算是一個重點的知識點,它也是設計模式中最為簡單、最為常見、最容易實現,也是最應該熟悉和掌握的模式了。我這裡給大家簡單的捋一遍,什麼是單例模式,怎麼用單例模式實現,程式碼案例又該怎麼寫?這些都會給大家一一講到。
1、首先,什麼是單例模式?簡單粗暴的講單例模式是一個類只能例項化一個物件。
2、實現單例模式的主要思路需要圍繞幾個方面來思考?整理主要有以下4點:
(1)把無參建構函式和複製建構函式私有化;
(2)定義一個類內的靜態成員指標;
(3)在類外初始化時,需要new一個物件;
(4)把指標的許可權設定為私有,然後提供一個靜態成員函式讓外面能夠獲取這個指標。
以上思路我們知道了,如果用簡單的程式碼來實現又該如何來實現?比如我們用下班打卡鐘打卡的方式來進行程式碼的實現,要求:“打印出每個打過卡的人,並記錄已列印的總次數。”,圍繞以上4點解題思路來完成,程式碼如下所示:
#include
以上是簡單的程式碼演示,是告訴大家簡單的利用單例模式實現的例子,方便更好理解這塊知識點的。既然我們知道了什麼是單例模式,還有程式碼的實現,最後一點我們還要知道單例模式的優缺點,以便與以後我們寫程式的時候,知道什麼時候需要用,什麼時候不需要用。
優點和缺點分別如下所示:
單例模式的優點分以下幾點:
因為單例模式在記憶體中就只有一個例項,其主要優點可以
減少記憶體的開支
。尤其是一個物件需要頻繁地建立銷燬時,畢竟建立或銷燬時效能又無法最佳化, 那麼單例模式就非常合適了;
因為單例模式只生成一個例項,所以,其主要優點可以
減少系統的效能開銷
,當一個物件產生需要比較多的資源時,比如讀取配置,產生其他依賴物件時,則可以透過在應用啟動時直接產生一個單例物件,然後永久駐留記憶體的方式來解決;
同時單例模式可以
避免對資源的多重佔用
,比如一個寫檔案操作,由於只有一個例項存在記憶體中,避免對同一個資原始檔的同時寫的操作;
單例模式可以在系統設定全域性的訪問點,
最佳化和共享資源
訪問,可以設計一個單例類,負責所有資料表的對映處理等。
單例模式的缺點分以下幾點:
因為單例模式沒有抽象層,所以
擴充套件比較困難
,如果非要擴充套件,除了修改程式碼基本上沒有第二種途徑可以實現,費時費力;
單例類的職責過重,在一定程度上違背了“單一職責原則”;
濫用單例將帶來一些負面問題,例如:為了節省資源將資料庫連線池物件設計為單例類,可能會導致共享連線池物件的程式過多而出現連線池溢位等問題;
如果在多個執行緒中操作單例類的成員時,但是單例中並沒有對該成員進行執行緒互斥處理。
總結:以上程式碼實現以簡單入門為主,不求複雜,只要圍繞實現思路和單例模式的優缺點。如若有不對的地方,麻煩評論指正,謝謝您的舉手之勞!
推薦文章
- “黃桃罐頭全是防腐劑”?別擔心,放心吃!
所以,黃桃罐頭本身不需要任何防腐劑就可以儲存很久...
- 成都美食之紅油抄手的簡單速成法,在家也可以吃到正宗的!
取一張抄手皮放入適量的肉餡對摺成一個三角形,三角形的一頭用筷子摸上點水或者就用弄肉餡的筷子一抹就行,輕微沾溼即可捏好的抄手,是不是有點像個小元寶按同一個方法包好所有的抄手(一次可以多包點,吃不完放冷凍室,隨吃隨取)拿一個碗,調入生抽2勺,辣...
- 神印王座動畫定檔復播,仍是26集的半年番,漫迷的週四快樂回來了
不過現在大家的週四快樂回來了,神印王座動畫依舊是週四檔,從官微的評論區,就能夠看到漫迷們的開心,幾乎都是清一水的歡迎,期待神印王座動畫的開播,這樣到時候,大家就能看到獵魔團選撥賽激烈的大戰,也能看到龍皓晨與聖採兒的甜美愛情,真得太讓人期待了...