設計模式 學習筆記(1) 單例模式之懶漢式

2021-08-22 02:43:43 字數 1631 閱讀 1755

**懶漢式構造單例類**

懶漢式,指的就是需要時再構造(延遲構造),在效率上會優於餓漢式,因為餓漢式在進入 main 之前就要構造,懶漢式不用。

基本特點是:執行緒不安全

基本模板(加鎖):

#include #define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )

#define dew( i , j , n ) for ( int i = int(n-1) ; i > int(j) ; --i )

#define _path __file__ , __line__

typedef std::pair < int , int > p ;

using std::cin ;

using std::cout ;

using std::endl ;

using std::string ;

class entity final

mymutex.unlock() ;

} return null ;

}private:

// 建構函式設為 private

explicit entity() = default ;

~entity() noexcept = default ;

entity(const entity &) = delete ;

entity& operator=(const entity &) = delete ;

entity& operator=(const entity &&) = delete ;

class litter

} ;private:

static entity *null ;

// gc 清理類

static litter litter ;

// 設定一把鎖

static std::mutex mymutex ;

} ;entity* entity::null ;

entity::litter entity::litter ;

std::mutex entity::mymutex ;

int main ()

優點:雙檢鎖,保證了執行緒安全;兩次判斷是否為 nullptr, 避免多次加鎖解鎖。

缺點:頻繁的加解鎖操作,損失了效能。

兩種單例模式的分析比較參考:單例模式的分析

2018.8.3

c++11 的 std::call_once 和 std::once_flag 搭配使用,可以保證在多個執行緒中,只構造一次,具體實現如下:

static entity *getinstance() ) ;

if ( null == nullptr )

throw std::bad_alloc() ;

} catch ( std::exception &e )

return null ;

}

程式執行結果:

1 設計模式學習之單例設計模式

一 什麼是單例設計模式?二 為什麼要使用單例設計模式?三 如何實現單例設計模式?缺點 2 懶漢式 public class mgr02 public static mgr02 getinstance return instance 缺點 3 synchronized修飾方法的寫法。解決懶漢式的執行緒...

設計模式 單例模式 懶載入

這篇文章總結幾種比較常用的設計模式,不懂得設計模式。怎麼敢稱熟悉oop思想。單例模式的核心結構中只包含乙個被稱為單例類的特殊類,通過單例模式可以保證系統中乙個類只有乙個例項 由於快載入單例模式是執行緒安全的,所以本文只討論懶載入單例模式的執行緒安全問題 版本一 使用懶載入 快載入 程式呼叫時再分配記...

設計模式之單例模式,學習筆記

所謂的單例模式就是說乙個物件,我們只去例項化一次,在頁面中如果有乙個物件是唯一的,那麼就可以用單例模式。var fn function name fn.prototype.getname function fn.getinstrace function var a fn.getinstrace js...