国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式 : 單例模式筆記

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式 : 單例模式筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

設(shè)計(jì)模式 : 單例模式筆記,進(jìn)階C++(C++與進(jìn)階數(shù)據(jù)結(jié)構(gòu)),設(shè)計(jì)模式,單例模式,筆記文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-652090.html

一.單例模式

  • 一個(gè)類(lèi)只能創(chuàng)建一個(gè)對(duì)象,這樣的類(lèi)的設(shè)計(jì)模式就稱(chēng)為單例模式,該模式保證系統(tǒng)中該類(lèi)只能有一個(gè)實(shí)例(并且父子進(jìn)程共享),一個(gè)很典型的單例類(lèi)就是C++STL的內(nèi)存池
  • C++單例模式的基本設(shè)計(jì)思路:
    • 私有化構(gòu)造函數(shù),刪除默認(rèn)的拷貝構(gòu)造函數(shù)賦值運(yùn)算符重載防止對(duì)象被直接創(chuàng)建和拷貝
    • 單例對(duì)象的內(nèi)存資源可以交給操作系統(tǒng)來(lái)釋放,也可以自定義析構(gòu)函數(shù)來(lái)完成特殊操作

二.單例模式的兩種實(shí)現(xiàn)方式

餓漢模式

  • 餓漢單例類(lèi)在程序進(jìn)入主函數(shù)之前就創(chuàng)建出唯一的實(shí)例
//餓漢單例模式
class HungerSingleton
{
public:
	//定義一個(gè)可以訪問(wèn)單例對(duì)象的靜態(tài)接口
	static HungerSingleton* Getinstance()
	{
		return &singleObj;
	}
private:
	//構(gòu)造函數(shù)私有化,防止對(duì)象被直接創(chuàng)建
	HungerSingleton() { cout << "單例對(duì)象創(chuàng)建" << endl; }
	//刪除拷貝接口,防止對(duì)象被拷貝
	HungerSingleton(const HungerSingleton& single) = delete;
	HungerSingleton& operator=(const HungerSingleton& single) = delete;

private:
	//定義靜態(tài)區(qū)的HungerSingleton成員
	static HungerSingleton singleObj;
	//也可以定義成指針,初始化時(shí)在堆上創(chuàng)建
	//static HungerSingleton* singleObj;
};
//初始化類(lèi)的靜態(tài)成員
HungerSingleton HungerSingleton::singleObj;
//初始化時(shí)在堆上創(chuàng)建
//HungerSingleton * HungerSingleton::singleObj = new HungerSingleton;
  • HungerSingleton靜態(tài)成員變量自身類(lèi)型的對(duì)象(或指針),類(lèi)的靜態(tài)成員變量在進(jìn)入主函數(shù)之前就完成初始化,由于構(gòu)造函數(shù)被私有化,因此在程序運(yùn)行過(guò)程中無(wú)法再創(chuàng)建該類(lèi)的對(duì)象
  • 餓漢單例模式的優(yōu)勢(shì):
    • 由于子進(jìn)程只能在主函數(shù)中被創(chuàng)建,因此餓漢單例類(lèi)不存在線程安全問(wèn)題,無(wú)需與其他線程的類(lèi)競(jìng)爭(zhēng)系統(tǒng)資源,在多線程高并發(fā)環(huán)境下能夠較為高效地執(zhí)行任務(wù)
  • 餓漢單例模式的劣勢(shì):
    • 如果一個(gè)程序中有多種餓漢單例類(lèi),我們無(wú)法控制它們的初始化順序
    • 餓漢單例類(lèi)會(huì)拖慢程序的啟動(dòng)速度,而且即便用不到該類(lèi)也會(huì)創(chuàng)建一個(gè)實(shí)例,可能造成內(nèi)存浪費(fèi)

懶漢模式

  • 懶漢單例類(lèi)在程序進(jìn)入主函數(shù)之后由后續(xù)代碼決定是否創(chuàng)建實(shí)例
//懶漢單例模式
class LazySingleton
{
public:
	//定義一個(gè)可以訪問(wèn)單例對(duì)象的靜態(tài)接口
	static LazySingleton* Getinstance()
	{
		//若singleObj為空指針則創(chuàng)建單例對(duì)象
		if (singleObj == nullptr)
		{
			singleObj = new LazySingleton;
		}
		return singleObj;
	}
private:
	//構(gòu)造函數(shù)私有化,防止對(duì)象被創(chuàng)建
	LazySingleton() { cout << "單例對(duì)象創(chuàng)建" << endl; }
	//刪除拷貝接口,防止對(duì)象被拷貝
	LazySingleton(const LazySingleton& single) = delete;
	LazySingleton& operator=(const LazySingleton& single) = delete;

private:
	//定義成靜態(tài)成員指針,初始化時(shí)在堆上創(chuàng)建
	static LazySingleton* singleObj;
};
//初始化時(shí)設(shè)置成空指針
LazySingleton * LazySingleton::singleObj = nullptr;
  • LazySingleton類(lèi)在第一次調(diào)用Getinstance()成員接口時(shí)才會(huì)創(chuàng)建實(shí)例
  • 懶漢單例模式的優(yōu)勢(shì):
    • 可以控制多種懶漢單例類(lèi)對(duì)象的初始化順序,并且需要用到的時(shí)候才創(chuàng)建,避免了內(nèi)存浪費(fèi)
  • 懶漢單例模式的劣勢(shì):
    • 在多線程環(huán)境中存在線程安全問(wèn)題,需要加鎖
      設(shè)計(jì)模式 : 單例模式筆記,進(jìn)階C++(C++與進(jìn)階數(shù)據(jù)結(jié)構(gòu)),設(shè)計(jì)模式,單例模式,筆記

到了這里,關(guān)于設(shè)計(jì)模式 : 單例模式筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++設(shè)計(jì)模式:?jiǎn)卫J剑ㄊ? decoding=
  • 【設(shè)計(jì)模式】C++單例模式詳解

    ?個(gè)類(lèi)僅有?個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn),該實(shí)例被所有程序模塊共享。 那么,我們必須保證: 該類(lèi)不能被復(fù)制;也不能被公開(kāi)的創(chuàng)造。 對(duì)于 C++ 來(lái)說(shuō),它的構(gòu)造函數(shù),拷貝構(gòu)造函數(shù)和賦值函數(shù)都不能被公開(kāi)調(diào)用。 單例模式又分為 懶漢模式 和 餓漢模式 ,它們

    2024年02月05日
    瀏覽(22)
  • c++設(shè)計(jì)模式之單例模式

    一個(gè)類(lèi)無(wú)論創(chuàng)建多少對(duì)象 , 都只能得到一個(gè)實(shí)例 如上述代碼中,我們通過(guò)new運(yùn)算符創(chuàng)建出了類(lèi)A的三個(gè)對(duì)象實(shí)例,而我們現(xiàn)在要做的是,如何設(shè)計(jì)類(lèi)A,使得上述代碼運(yùn)行之后永遠(yuǎn)只產(chǎn)生同一個(gè)對(duì)象實(shí)例 ????????我們知道,一個(gè)類(lèi)對(duì)象是通過(guò)這個(gè)類(lèi)的構(gòu)造函數(shù)創(chuàng)建的,因此

    2024年01月19日
    瀏覽(26)
  • 《設(shè)計(jì)模式的藝術(shù)》筆記 - 單例模式

    ????????單例模式優(yōu)點(diǎn)是可以確保系統(tǒng)中只存在單個(gè)對(duì)象實(shí)例,缺點(diǎn)是不便擴(kuò)展,一定程度上違背單一原則,既提供業(yè)務(wù)方法,又提供創(chuàng)建對(duì)象方法 ? ? ? ? 在類(lèi)加載的時(shí)候就創(chuàng)建好對(duì)象,獲取對(duì)象時(shí)直接返回即可 ? ? ? ? 在類(lèi)加載的時(shí)候沒(méi)有創(chuàng)建對(duì)象,第一次獲取對(duì)象

    2024年02月02日
    瀏覽(18)
  • 學(xué)習(xí)筆記-設(shè)計(jì)模式-創(chuàng)建型模式-單例模式

    一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)此實(shí)例的點(diǎn),哪怕多線程同時(shí)訪問(wèn)。 單例模式主要解決了 一個(gè)全局使用的類(lèi)被頻繁的創(chuàng)建和消費(fèi) 的問(wèn)題。 單例模式的案例場(chǎng)景 數(shù)據(jù)庫(kù)的連接池不會(huì)反復(fù)創(chuàng)建 spring中一個(gè)單例模式bean的生成和使用 在我們平常的代碼中需要設(shè)置全局

    2024年02月08日
    瀏覽(18)
  • C++設(shè)計(jì)模式創(chuàng)建型之單例模式

    一、概述 ? ? ? ? 單例模式也稱(chēng)單態(tài)模式,是一種創(chuàng)建型模式,用于創(chuàng)建只能產(chǎn)生一個(gè)對(duì)象實(shí)例的類(lèi)。例如,項(xiàng)目中只存在一個(gè)聲音管理系統(tǒng)、一個(gè)配置系統(tǒng)、一個(gè)文件管理系統(tǒng)、一個(gè)日志系統(tǒng)等,甚至如果吧整個(gè)Windows操作系統(tǒng)看成一個(gè)項(xiàng)目,那么其中只存在一個(gè)任務(wù)管理

    2024年02月14日
    瀏覽(28)
  • 【C++】特殊類(lèi)設(shè)計(jì)(單例模式)

    【C++】特殊類(lèi)設(shè)計(jì)(單例模式)

    設(shè)計(jì)模式是一套被反復(fù)使用、多數(shù)人知曉的、經(jīng)過(guò)分類(lèi)的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。 使用設(shè)計(jì)模式的目的:為了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。 根本原因是為了代碼復(fù)用,增加可維護(hù)性。 設(shè)計(jì)模式的例子:迭代器模式 拷貝一共就只有兩個(gè)場(chǎng)景,一

    2023年04月22日
    瀏覽(22)
  • C++特殊類(lèi)設(shè)計(jì)(單例模式)

    C++98 將拷貝構(gòu)造函數(shù)與賦值運(yùn)算符重載只聲明不定義,并且將其訪問(wèn)權(quán)限設(shè)置為私有即可。 原因: 設(shè)置成私有:如果只聲明沒(méi)有設(shè)置成private,用戶(hù)自己如果在類(lèi)外定義了,就可以不能禁止拷貝了 只聲明不定義:不定義是因?yàn)樵摵瘮?shù)根本不會(huì)調(diào)用,定義了其實(shí)也沒(méi)有什么意義

    2024年01月19日
    瀏覽(23)
  • 【C++】特殊類(lèi)設(shè)計(jì)+單例模式+類(lèi)型轉(zhuǎn)換

    【C++】特殊類(lèi)設(shè)計(jì)+單例模式+類(lèi)型轉(zhuǎn)換

    需要云服務(wù)器等云產(chǎn)品來(lái)學(xué)習(xí)Linux的同學(xué)可以移步/--騰訊云--/--阿里云--/--華為云--/官網(wǎng),輕量型云服務(wù)器低至112元/年,新用戶(hù)首次下單享超低折扣。 ? 目錄 一、設(shè)計(jì)一個(gè)類(lèi),不能被拷貝 1、C++98 2、C++11 二、設(shè)計(jì)一個(gè)類(lèi),只能在堆上創(chuàng)建對(duì)象 1、將構(gòu)造設(shè)為私有 2、將析構(gòu)設(shè)為

    2024年02月06日
    瀏覽(23)
  • 【C++高階(八)】單例模式&特殊類(lèi)的設(shè)計(jì)

    【C++高階(八)】單例模式&特殊類(lèi)的設(shè)計(jì)

    ??博主CSDN主頁(yè):杭電碼農(nóng)-NEO?? ? ?專(zhuān)欄分類(lèi):C++從入門(mén)到精通? ? ??代碼倉(cāng)庫(kù):NEO的學(xué)習(xí)日記?? ? ??關(guān)注我??帶你學(xué)習(xí)C++ ? ???? 在實(shí)際場(chǎng)景中,總會(huì)遇見(jiàn)一些特殊情況, 比如設(shè)計(jì)一個(gè)類(lèi),只能在堆上開(kāi)辟空間, 亦或者是設(shè)計(jì)一個(gè)類(lèi)只能實(shí)例化一個(gè)對(duì)象 在實(shí)際需求的場(chǎng)景

    2024年02月04日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包