設計模式之單例模式

2021-09-28 18:17:42 字數 2008 閱讀 3764

簡單的將就是只能存在乙個例項物件。該類提供乙個取得其物件的例項方法。

public

class

test

}class

singleton

//通過靜態方法

public

static singleton getsingleton()

}

可以看見,

優點在於此種寫法比較簡單,類載入就完成了例項化,避免了執行緒同步問題。

缺點是類載入時就例項化,沒有達到懶載入效果。

可能造成記憶體浪費。

class

singleton

private

singleton()

public

static singleton getsingleton()

}

用到的時候才建立。它是執行緒不安全的,只能在單執行緒下使用。

package cn.bubbletg.singletonpattern.t01;

/** * @author www.bubbletg.cn * bubbletg

* @version 1.0

* @date 2019/10/18 8:22

* * 設計模式之單例模式

* 之懶漢式

*/public

class

test01

}class

singleton

//通過靜態方法

public

static singleton getsingleton()

return singleton;

}}

執行結果:

true

cn.bubbletg.singletonpattern.t01.singleton@15db9742

cn.bubbletg.singletonpattern.t01.singleton@15db9742

因為是執行緒不安全的,我們對它加以改進。

對原來**修改:

新增乙個 synchronized 關鍵字。

解決了執行緒安全問題,但是效率太低了。

因為每次獲取獲取例項都要同步,然後方法只需要執行一次例項。

class

singleton

//新增乙個synchronized

//通過靜態方法

public

static

synchronized singleton getsingleton()

return singleton;

}}

發現新增了安全,但是效率又不行了。我們再繼續改進。

解決了安全與效率的問題。

class

singleton

//通過靜態方法

public

static singleton getsingleton()

}}return singleton;

}}

class

singleton

private

static

class

singletoninstance

public

static singleton getsingleton()

}

靜態內部類方式在singleton類裝載是並不會立即例項化,而是在需要時候例項化,又因為是靜態,只有第一次載入時候才初始化。沒有執行緒安全問題。

public

enum singletonpatterndemo05

}public

static

void

singletonpatterndemo05test()

列舉方式可以實現單例模式,避免了多執行緒安全問題,還能防止反序列化。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...