21種設計模式整理(1) 單例

2021-06-26 17:54:29 字數 1550 閱讀 7801

以前的程式設計是面向過程的程式設計,資料結構跟演算法是組成他們的基本元素。所以我一直認為資料結構與演算法的學習,有利於我實現底層功能,這是程式設計的內功。

但現在都是物件導向的程式設計,需求已經轉變為易於維護,易於擴充套件,易於理解,冗餘降低,降低耦合。我認為i這些的問題的本質就是程式設計過程中如何設計程式。而其中的基礎,我認為應該是設計模式。高一層次就是框架。

一種設計模式就代表著一種需求,一種解決辦法的思想,這些都是前輩們在多次遇到問題,然後解決問題得出來的經驗,所以如果想站在前人的肩膀上,這些設計模式是必須要精通的。不過想精通這些,絕對不是我說的這樣看看,練練**就能成功的,這需要在以後自己的專案中去長期實踐,才能真正的感受的他們的優點,缺點,用處。我在這個行業對自己提醒的一句話就是:只有學習到了思考方式才是真正的學到了一門技術。

對每乙個設計模式,我都應該問自己:為什麼會出現這種模式,這種設計模式有什麼優點,什麼缺點,對於物件導向的程式設計有什麼好處,又有什麼需要特別注意的地方。可惜的是,我現在只是剛剛接觸的階段,只能理解到很膚淺的知識。不過,我還是希望通過對這些設計模式的整理,來讓自己對於設計模式框架有乙個大體的把握,在以後的開發過程中才能進行比較。

今天只說乙個最簡單也是最常用的設計模式:單例設計模式。

單例在開發中常常遇到。當某乙個類,我們希望他在記憶體中只存在乙個例項物件時,我們就需求與單例設計了。

例的實現方法很多,比較基本的思路是將建構函式私有化,這樣,外部就不能建立新的例項了。使用乙個靜態成員變數用於儲存乙個例項物件,一種獲取方式是通過乙個類的靜態的公有方法將這個成員變數返回,通常命名為getinstance。

這種方式又分俗稱的「懶漢式」和「惡漢式」兩種。

懶漢式就是類載入的時候就建立了物件。而餓漢式則是在第一次需要時才建立例項。

懶漢式實現簡單,該靜態成員變數直接初始化為乙個新例項,但是未使用前,記憶體就有所消耗。

而餓漢式,靜態成員初始化為null,通過對它進行是否為null的判斷,為空則建立新的物件,但需要考慮執行緒安全問題:一種方式是對getinstance進行同步,但每次獲取物件都需要同步會降低效能(第一次建立物件之後都只是獲取同一物件,不需要同步了)。另外一種方式是首先判斷是否為null,是的話才進入新建例項的同步**塊(未避免多執行緒同時進入了此**塊,導致多次建立物件,可以在新建例項之前,再次判斷是否為null),這樣如果不為空則不需要使用同步。

由於列舉具有以上的性質:建構函式私有。所以單列舉也可以實現單例項。

以上的實現優點是實現較簡單,物件的管理有該類來管理。不過只要物件被建立出來,則由於有靜態成員指向它,所以後期,這個物件會一直存在。

public class singlecase 

public static case1 getinstance()

} /**餓漢式**/

public static class case2

public static case2 getinstance() }}

return handle;

} }/**列舉,較少用**/

public enum case3

public static void main(string args)

}

21種設計模式之 單例模式

單例模式 使用場合 適合乙個類中只有乙個例項的情況。比如任務管理器。單例模式的必要要素 a 私有的建構函式 b 私有的靜態靜態字段 c 以自己為返回值靜態 公共的方法 單例在使用場景的不同又分為了餓漢單例和懶漢單例模式 餓漢單例模式在類的載入時就把類的例項交給了引用 懶漢單例模式只有取得類的例項方法...

設計模式 21 單例模式

宣告 vs2012中已經支援c 11了,因此下面的程式在vs2012中可以執行。如果版本比2012低,可能因為不支援 std mutex,std shared ptr而失敗。ifndef singleton h define singleton h include include using nam...

23種設計模式 1單例模式

1.單例模式 singleton pattern 是一種簡單的設計模式,它的定義如下 為了確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。2.通用 如下 class singleton 通過該方法獲得例項化物件 public static songleton getinstance...