設計模式 單例模式

2021-10-01 23:45:47 字數 3098 閱讀 6952

單例模式屬於建立型模式,整個程式中有且僅有乙個例項。該類自己負責建立物件,同時確保只有乙個物件被建立。單例模式有3種例項方式:懶漢方式、餓漢方式和雙重鎖方式。

特點:類的建構函式式私有、私有靜態的自身類的屬性、公有對外的獲取例項的靜態方法。

懶漢方式:

#include

"stdafx.h"

#include

using

namespace

std;

class

singleton ;

singleton

* singleton

::m_ins =

null;

singleton

::singleton()

singleton

* singleton

::getinstance()

return

m_ins; }

void

singleton

::print(

const

std::

string

& strcontent)

intmain(

intargc

, _tchar

* ar**)

懶漢方式只適用於單執行緒的條件下,多執行緒可能會存在同時構造乙個例項的情況。

雙重鎖方式:

#include

"stdafx.h"

#include

#include

#include

#include

using

namespace

std;

class

singleton ;

singleton

* singleton

::m_ins =

null;

mutex

singleton

::m_mtx;

singleton

::singleton()

singleton

* singleton

::getinstance()

m_mtx.unlock(); }

return

m_ins; }

void

singleton

::print(

const

std::

string

& strcontent)

void

func1(

const

std::

string

& str)

}void

func2(

const

std::

string

& str)

}int

main(

intargc

, _tchar

* ar**)

餓漢方式:

利用靜態變數的特性,函式中的靜態區域性變數只會被初始化一次。

#include

"stdafx.h"

#include

#include

#include

#include

using

namespace

std;

class

singleton ;

mutex

singleton

::m_mtx;

singleton

::singleton()

singleton

* singleton

::getinstance()

void

singleton

::print(

const

std::

string

& strcontent)

void

func1(

const

std::

string

& str)

}void

func2(

const

std::

string

& str)

}int

main(

intargc

, _tchar

* ar**)

另外一種方式是類中定義static

singleton

* m_ins;

類的外面初始化

singleton

*singleton

::m_ins

= new

singleton()

#include

"stdafx.h"

#include

#include

#include

#include

using

namespace

std;

class

singleton ;

mutex

singleton

::m_mtx;

singleton

* singleton

::m_ins =

newsingleton

();

singleton

::singleton()

singleton

* singleton

::getinstance()

void

singleton

::print(

const

std::

string

& strcontent)

void

func1(

const

std::

string

& str)

}void

func2(

const

std::

string

& str)

}int

main(

intargc

, _tchar

* ar**)

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...