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

單例模式類(lèi)設(shè)計(jì)|什么是餓漢模式和懶漢模式

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

前言

那么這里博主先安利一些干貨滿(mǎn)滿(mǎn)的專(zhuān)欄了!

首先是博主的高質(zhì)量博客的匯總,這個(gè)專(zhuān)欄里面的博客,都是博主最最用心寫(xiě)的一部分,干貨滿(mǎn)滿(mǎn),希望對(duì)大家有幫助。

高質(zhì)量干貨博客匯總https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482


什么是單例模式

一個(gè)類(lèi)只能創(chuàng)建一個(gè)對(duì)象,即單例模式,該模式可以保證系統(tǒng)中該類(lèi)只有一個(gè)實(shí)例,并提供一個(gè)訪(fǎng)問(wèn)它的全 局訪(fǎng)問(wèn)點(diǎn),該實(shí)例被所有程序模塊共享。比如在某個(gè)服務(wù)器程序中,該服務(wù)器的配置信息存放在一個(gè)文件 中,這些配置數(shù)據(jù)由一個(gè)單例對(duì)象統(tǒng)一讀取,然后服務(wù)進(jìn)程中的其他對(duì)象再通過(guò)這個(gè)單例對(duì)象獲取這些配置 信息,這種方式簡(jiǎn)化了在復(fù)雜環(huán)境下的配置管理。

單例模式有兩種實(shí)現(xiàn)方式:

  • 餓漢模式
  • 懶漢模式

餓漢模式

就是說(shuō)不管你將來(lái)用不用,程序啟動(dòng)時(shí)就創(chuàng)建一個(gè)唯一的實(shí)例對(duì)象。

優(yōu)點(diǎn):

  • 簡(jiǎn)單、沒(méi)有線(xiàn)程安全問(wèn)題

缺點(diǎn):

  • 當(dāng)一個(gè)程序中有多個(gè)單例,并且有先后初始化順序的要求的時(shí)候,餓漢無(wú)法控制。
  • 餓漢單例類(lèi)創(chuàng)建得多的時(shí)候,初始化任務(wù)多的時(shí)候,會(huì)影響程序的啟動(dòng)速度。
//設(shè)計(jì)只能創(chuàng)建一個(gè)對(duì)象的類(lèi)(單例模式)
//有兩種設(shè)計(jì)方案
//餓漢模式 -- 一開(kāi)始(main())之前就創(chuàng)建出對(duì)象了
#if 1
class MemoryPool //假設(shè)要求設(shè)計(jì)一個(gè)內(nèi)存池 -- 要求是單例的 ,當(dāng)然只是名字而已,我們不是真的實(shí)現(xiàn)內(nèi)存池
{
public:
	static MemoryPool* GetInstance()
	{
		return _pinst;
	}
	void* Alloc(size_t n)
	{
		void* ptr = nullptr;
		//...
		//里面啥東西我們不管
		return ptr;
	}
	void Dealloc(void* ptr)
	{
		//...
	}
protected:
	char* _ptr = nullptr;
protected:
	//構(gòu)造函數(shù)私有
	MemoryPool() {}
	//兩種寫(xiě)法,這里只寫(xiě)了一種,寫(xiě)成指針也可以,不寫(xiě)成指針也可以
	static MemoryPool* _pinst;//聲明
};
MemoryPool* MemoryPool::_pinst = new MemoryPool;


#define MemoryPoolObject MemoryPool::GetInstance()
int main()
{
	//一般是這樣調(diào)用的,直接調(diào)就行
	void* ptr1 = MemoryPool::GetInstance()->Alloc(10);
	MemoryPool::GetInstance()->Dealloc(ptr1);
	//單例模式一般就是通過(guò)這個(gè) MemoryPool::GetInstance() 去找到這個(gè)已經(jīng)創(chuàng)建好的對(duì)象,去調(diào)它里面的東西
	void* ptr2 = MemoryPoolObject->Alloc(29);
	MemoryPoolObject->Dealloc(ptr2);
	return 0;
}
#endif

懶漢模式

對(duì)象第一次使用的時(shí)候再創(chuàng)建。

優(yōu)點(diǎn):

  • 可以控制順序
  • 不影響啟動(dòng)速度

缺點(diǎn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-604987.html

  • 相對(duì)復(fù)雜
  • 線(xiàn)程安全問(wèn)題要處理好
//懶漢模式
//對(duì)象第一次使用的時(shí)候再創(chuàng)建
class MemoryPool //假設(shè)要求設(shè)計(jì)一個(gè)內(nèi)存池 -- 要求是單例的 ,當(dāng)然只是名字而已,我們不是真的實(shí)現(xiàn)內(nèi)存池
{
public:
	static MemoryPool* GetInstance()
	{
		//如果發(fā)現(xiàn)指針是nullptr的時(shí)候,說(shuō)明我們是第一次使用這個(gè)類(lèi)
		if (_pinst == nullptr)
		{
			//第一次創(chuàng)建
			cout << "第一次創(chuàng)建對(duì)象" << endl;
			_pinst = new MemoryPool;
		}
		return _pinst;
	}
	void* Alloc(size_t n)
	{
		void* ptr = nullptr;
		//...
		//里面啥東西我們不管
		return ptr;
	}
	void Dealloc(void* ptr)
	{
		//...
	}
	class CGarbo
	{
	public:
		~CGarbo()
		{
			if (_pinst)delete _pinst;
		}
	};
protected:
	char* _ptr = nullptr;
protected:
	//構(gòu)造函數(shù)私有
	MemoryPool() {}
	//兩種寫(xiě)法,這里只寫(xiě)了一種,寫(xiě)成指針也可以,不寫(xiě)成指針也可以
	static MemoryPool* _pinst;//聲明
};
MemoryPool* MemoryPool::_pinst = nullptr;
//回收對(duì)象
//在main結(jié)束之后,它會(huì)調(diào)用析構(gòu)函數(shù),就會(huì)釋放單例對(duì)象
static MemoryPool::CGarbo gc;
#define MemoryPoolObject MemoryPool::GetInstance()
int main()
{
	//一般是這樣調(diào)用的,直接調(diào)就行
	cout << " -------- 第一次使用 -------- " << endl;
	void* ptr1 = MemoryPool::GetInstance()->Alloc(10);
	MemoryPool::GetInstance()->Dealloc(ptr1);
	//單例模式一般就是通過(guò)這個(gè) MemoryPool::GetInstance() 去找到這個(gè)已經(jīng)創(chuàng)建好的對(duì)象,去調(diào)它里面的東西
	cout << " -------- 第二次使用 -------- " << endl;
	void* ptr2 = MemoryPoolObject->Alloc(29);
	MemoryPoolObject->Dealloc(ptr2);
	return 0;
}

單例模式的釋放問(wèn)題

  • 一般情況下,單例對(duì)象不需要釋放 -- 一般來(lái)說(shuō)整個(gè)程序運(yùn)行期間都會(huì)用它。單例對(duì)象再進(jìn)程正常結(jié)束之后,也會(huì)資源釋放。
  • 有些特殊場(chǎng)景需要釋放,比如單例對(duì)象析構(gòu)時(shí)候,需要進(jìn)行一些持久化操作(往文件、數(shù)據(jù)庫(kù)里面去寫(xiě)),大思路:定義一個(gè)內(nèi)部的垃圾回收類(lèi)

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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)文章

  • 設(shè)計(jì)模式第一課-單例模式(懶漢模式和餓漢模式)

    設(shè)計(jì)模式第一課-單例模式(懶漢模式和餓漢模式)

    個(gè)人理解:?jiǎn)卫J綄?shí)際就是通過(guò)類(lèi)加載的方式獲取到一個(gè)對(duì)象,并且保證這個(gè)對(duì)象在使用中只有一個(gè),不允許再次被創(chuàng)建 1、懶漢模式的基礎(chǔ)寫(xiě)法 代碼解釋?zhuān)?(1)、編寫(xiě)LazySingleton類(lèi)的時(shí)候,需要將成員屬性設(shè)定為static,這樣才會(huì)是類(lèi)屬性 (2)、重寫(xiě)構(gòu)造方法,將其設(shè)置

    2024年02月05日
    瀏覽(22)
  • Java中單例(單態(tài)、原子)設(shè)計(jì)模式(餓漢式/懶漢式)

    先看文章目錄,大致了解知識(shí)點(diǎn)結(jié)構(gòu),直接點(diǎn)擊文章目錄可以跳轉(zhuǎn)到文章指定位置。 設(shè)計(jì)模式就是設(shè)計(jì)出來(lái)的固定問(wèn)題的解決方法,描述了在軟件設(shè)計(jì)過(guò)程中的一些不斷重復(fù)發(fā)生的問(wèn)題和解決方案。遇到類(lèi)似問(wèn)題的時(shí)候可以直接使用現(xiàn)成的模式方案。 ①單例模式中一個(gè)類(lèi)只

    2024年02月04日
    瀏覽(28)
  • 設(shè)計(jì)模式——C++11實(shí)現(xiàn)單例模式(餓漢模式、懶漢模式),與單例的進(jìn)程

    本文將介紹單例模式,使用C++11實(shí)現(xiàn)多個(gè)版本的單例模式,分析各自的優(yōu)缺點(diǎn)。最后提及如何實(shí)現(xiàn)一個(gè)單例的進(jìn)程。 單例模式屬于創(chuàng)建型模式,提供了一種創(chuàng)建對(duì)象的方式。 單例模式確保一個(gè)類(lèi)只有一個(gè)實(shí)例。通過(guò)一個(gè)類(lèi)統(tǒng)一地訪(fǎng)問(wèn)這個(gè)實(shí)例。 思想:將構(gòu)造函數(shù)設(shè)置為私有

    2024年02月09日
    瀏覽(21)
  • Java設(shè)計(jì)模式之單例模式詳解(懶漢式和餓漢式)

    在開(kāi)發(fā)工作中,有些類(lèi)只需要存在一個(gè)實(shí)例,這時(shí)就可以使用單例模式。Java中的單例模式是一種常見(jiàn)的設(shè)計(jì)模式,它確保一個(gè)類(lèi)只有一個(gè)實(shí)例,并提供全局訪(fǎng)問(wèn)點(diǎn)。下面來(lái)介紹一下兩種常見(jiàn)的單例模式:懶漢式和餓漢式。 懶漢式屬于一種延遲加載的單例模式,它的特點(diǎn)是在

    2024年02月15日
    瀏覽(25)
  • 單例設(shè)計(jì)模式精講(餓漢式和懶漢式實(shí)現(xiàn)的重要方法)

    目錄 什么叫做單例模式? 餓漢式和懶漢式的區(qū)別? 餓漢式-方式1(靜態(tài)變量方式) 餓漢式-方式2(靜態(tài)代碼塊方式) 懶漢式-方式1(線(xiàn)程不安全) 懶漢式-方式2(線(xiàn)程安全) 懶漢式-方式3(雙重檢查鎖) 懶漢式-方式4(靜態(tài)內(nèi)部類(lèi)方式) 什么叫做單例模式? ????????涉

    2024年02月12日
    瀏覽(15)
  • 【Java|多線(xiàn)程與高并發(fā)】設(shè)計(jì)模式-單例模式(餓漢式,懶漢式和靜態(tài)內(nèi)部類(lèi))

    【Java|多線(xiàn)程與高并發(fā)】設(shè)計(jì)模式-單例模式(餓漢式,懶漢式和靜態(tài)內(nèi)部類(lèi))

    設(shè)計(jì)模式是一種在軟件開(kāi)發(fā)中常用的解決復(fù)雜問(wèn)題的方法論。它提供了一套經(jīng)過(guò)驗(yàn)證的解決方案,用于解決特定類(lèi)型問(wèn)題的設(shè)計(jì)和實(shí)現(xiàn)。設(shè)計(jì)模式可以幫助開(kāi)發(fā)人員提高代碼的可重用性、可維護(hù)性和可擴(kuò)展性。 設(shè)計(jì)模式有很多,本文主要介紹單例模式. 單例模式是一種創(chuàng)建型設(shè)

    2024年02月11日
    瀏覽(27)
  • 【單例模式】餓漢模式和懶漢模式的單例模式

    設(shè)計(jì)模式是一種 在軟件設(shè)計(jì)中經(jīng)過(guò)驗(yàn)證的解決問(wèn)題的方案或者模版 。它們是從實(shí)踐中總結(jié)出來(lái)的,可以幫助解決常見(jiàn)的設(shè)計(jì)問(wèn)題,提高代碼的重用性、維護(hù)性和擴(kuò)展性。 設(shè)計(jì)模式可以分為三大類(lèi): 創(chuàng)建型模式(Creational Patterns) :創(chuàng)建型模式關(guān)注對(duì)象的實(shí)例化過(guò)程,包括如

    2024年02月16日
    瀏覽(22)
  • 單例模式(餓漢式單例 VS 懶漢式單例)

    單例模式(餓漢式單例 VS 懶漢式單例)

    所謂的單例模式就是保證某個(gè)類(lèi)在程序中只有一個(gè)對(duì)象 1.構(gòu)造方法私有化(保證對(duì)象的產(chǎn)生個(gè)數(shù)) ? ? ? ? 創(chuàng)建類(lèi)的對(duì)象,要通過(guò)構(gòu)造方法產(chǎn)生對(duì)象 ? ? ? ?構(gòu)造方法若是public權(quán)限,對(duì)于類(lèi)的外部,可以隨意創(chuàng)建對(duì)象,無(wú)法控制對(duì)象個(gè)數(shù) ? ? ? 構(gòu)造方法私有化,這樣類(lèi)的外

    2024年02月09日
    瀏覽(21)
  • 單例模式:懶漢式和餓漢式

    單例模式:懶漢式和餓漢式

    目錄 懶漢模式和餓漢模式 區(qū)別 示例 懶漢模式線(xiàn)程不安全 懶漢模式線(xiàn)程安全 ?懶漢模式內(nèi)部靜態(tài)變量線(xiàn)程安全 餓漢式線(xiàn)程安全 指的是在系統(tǒng)生命周期內(nèi),只產(chǎn)生一個(gè)實(shí)例。 分為 懶漢式 和 餓漢式 創(chuàng)建時(shí)機(jī)和線(xiàn)程安全 線(xiàn)程安全 :多線(xiàn)程共享資源的過(guò)程中,線(xiàn)程安全通過(guò)同

    2024年02月16日
    瀏覽(21)
  • 單例模式(懶漢式和餓漢式)

    單例模式是指保證某個(gè)類(lèi)在整個(gè)軟件系統(tǒng)中只有一個(gè)對(duì)象實(shí)例,并且該類(lèi)僅提供一個(gè)返回其對(duì)象實(shí)例,由于單例模式在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存開(kāi)支,特別是一個(gè)對(duì)象需要頻繁地創(chuàng)建、銷(xiāo)毀時(shí),而且創(chuàng)建或銷(xiāo)毀時(shí)性能又無(wú)法優(yōu)化,單例模式的優(yōu)勢(shì)就非常明顯。 在計(jì)算

    2024年02月13日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包