設計模式 單例模式

2021-07-29 23:57:31 字數 2149 閱讀 3215

單例模式:程式在執行期間只能有乙個例項物件。

第一中實現方式:飢漢模式

在類進行初始化的時候 就載入了singleton 物件,這是會占用記憶體。

package

com.zpj.designmode.singleton;

/***

@author

perkins zhu

* @date:2023年8月29日 下午7:53:29

* @version

:1.1

* */public

class

singleton ;

//提供靜態public方法,供外部取得單例物件

public

static

singleton getinstance()

}

第二種實現方式:懶漢模式

在進行呼叫時對singleton進行例項化,這時如果多個執行緒同時呼叫getinstance(),這時執行緒存在安全問題。

為了解決這個問題可以對getinstance()進行加鎖同步,如getinstance02()。

package

com.zpj.designmode.singleton;

/***

@author

perkins zhu

* @date:2023年8月29日 下午7:53:29

* @version

:1.1

* */public

class

singleton ;

//提供靜態public方法,供外部取得單例物件

public

static

singleton getinstance()

return

singleton;

}//對該方法加鎖處理進行同步,但是會降低訪問效率

public

static

synchronized

singleton getinstance02()

return

singleton;}}

但這樣又會造成訪問速度過慢,那使用「雙重檢查加鎖」方式實現,

第三種實現方式:雙重檢查加鎖

package

com.zpj.designmode.singleton;

/***

@author

perkins zhu

* @date:2023年8月29日 下午7:53:29

* @version

:1.1

* */public

class

singleton ;

//雙重加鎖機制,僅僅在第一次建立例項的時候同步

public

static

singleton getinstance03() }}

return

singleton;}}

第四種:靜態內部類實現單例

package

com.zpj.designmode.singleton;

/***

@author

perkins zhu

* @date:2023年8月29日 下午7:53:29

* @version

:1.1

* */public

class

singleton

//私有化構造器,阻止外部進行例項化物件

private

singleton() ;

public

static

singleton getinstance()

}

第五種:利用列舉特性實現單例

package

com.zpj.designmode.singleton;

/***

@author

perkins zhu

* @date:2023年8月29日 下午7:53:29

* @version

:1.1

* */public

enum

singleton

}

在開發過程中需要採用哪種方式要根據具體情況來確定。例如不會發生多執行緒同時操作的情況使用懶漢模式就可以。

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...