1 設計模式之單例模式

2021-10-11 18:59:45 字數 2424 閱讀 8053

設計模式分為三類型別,共23種

建立型模式:單例模式、抽象工廠模式、原型模式、建造者模式、工廠模式。

結構型模式:介面卡模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、**模式。

行為型模式:模板方法模式、命令模式、訪問者模式、迭代器模式、觀察者模式、中介模式、備忘錄模式、直譯器模式、狀態模式、策略模式、職責鏈模式。

單例模式是指在記憶體中只會建立且僅建立一次物件的設計模式。在程式中多次使用同乙個物件且作用相同時,為了防止頻繁地建立物件使得記憶體飆公升,單例模式可以讓程式僅在記憶體中建立乙個物件,讓所有需要呼叫的地方都共享這一單例物件。

餓漢式(靜態常量)

餓漢式(靜態**塊)

懶漢式(執行緒不安全)

懶漢式(執行緒安全,同步方法)

懶漢式(執行緒安全,雙重檢查)

靜態內部類

列舉步驟如下:

構造器私有化(防止new)

類的內部建立物件

向外暴露乙個靜態的公共方法(getinstance)

**如下:

public

class

singleton

private

final

static singleton instance =

newsingleton()

;public

static singleton getinstance()

}

總結:這種方式寫法簡單,容易理解,避免了執行緒同步的問題。但是,如果從始至終都沒用過這個類,它也會載入到記憶體中,可能回造成記憶體浪費。

**如下:

public

class

singleton

private

static singleton instance;

static

public

static singleton getinstance()

}

總結:其優缺點和上面一樣

懶漢式就是懶,需要用到的時候才去建立物件。

public

class

singleton

private

static singleton instance;

//呼叫方法時才建立物件

public

static singleton getinstance()

return instance;

}}

總結:起到了懶載入的效果,一定程度上避免了記憶體的浪費。但是,第一次呼叫getinstance()方法時,如果是多個執行緒同時呼叫的話,由於沒有鎖機制,多個執行緒會同時進入方法內部,這時就會產生多個物件,只能在單執行緒下使用,在實際開發中不建議使用。

public

class

singleton

private

static singleton instance;

//呼叫方法時才建立物件

public

static

synchronized singleton getinstance()

return instance;

}}

總結:這種寫法解決了上面的執行緒安全問題。但是,它依然不是被推薦使用的。因為多執行緒使用的話,每次呼叫getinstance()都會對方法進行加鎖,其它執行緒只能等鎖釋放了才能訪問,會帶來效能問題,實際開發中不推薦使用。

public

class

singleton

public

static singleton getinstance()

}}return singleton;

}}

public

class

singleton

public

static

class

singletoninstance

public

static

synchronized singleton getinstance()

}

public

enum singleton

總結:**少,避免執行緒安全問題,而且可以防止反序列。餓漢式和懶漢式都無法避免反序列化,因為反射可以呼叫類的私有方法,那麼也就可以呼叫私有建構函式,能呼叫就可以例項化多個,列舉的方式可以防止這種情況,推薦使用。

1 設計模式學習之單例設計模式

一 什麼是單例設計模式?二 為什麼要使用單例設計模式?三 如何實現單例設計模式?缺點 2 懶漢式 public class mgr02 public static mgr02 getinstance return instance 缺點 3 synchronized修飾方法的寫法。解決懶漢式的執行緒...

設計模式1之Singleton單例模式

懶漢式 public class singleton public static synchronized singleton getinstance return uniqueinstance 懶漢式 volatile public class singleton public static si...

java設計模式之單例模式(1)

單例模式 屬於建立型模式。專案中只存在某個類的乙個物件,而且只可能存在乙個物件。那麼我們說這個類是單例模式,也叫單態模式。單例模式分為兩種 懶漢式 和 餓漢式。package com.pattern.build.singleton 餓漢式 author chuer date 2014 7 17 下午...