設計模式的學習 四 建立型模型 單例模式

2022-08-26 16:48:18 字數 2902 閱讀 8672

建立型模式的主要關注點是「怎樣建立物件?」,它的主要特點是「將物件的建立與使用分離」。這樣可以降低系統的耦合度,使用者不需要關注物件的建立細節,物件的建立由相關的工廠來完成,就像我們去商場購買商品,不需要知道商品怎麼生產出來的,因為它們由專門的廠商生產。

建立型模式分為以下幾種。

以上 5 種建立型模式,除了工廠方法模式

屬於類建立型模式,其他的全部屬於物件建立型模式,在之後的部落格中詳細地介紹它們的特點、結構與應用。

在有些系統中,為了節省記憶體資源,保證資料內容的一致性,對某些類要求只能建立乙個例項,這就是所謂的單例模式。

單例模式的定義與特點

單例(singleton)模式的定義:指乙個類只有乙個例項,且該類能自行建立這個例項的一種模式,例如,windows中只能開啟乙個任務管理器,這樣可以避免因為開啟多個任務管理器視窗而造成的記憶體資源浪費,或出現各個視窗顯示內容的不一致錯誤。

在計算機系統中, 還有windows的**站,作業系統中的檔案系統、多執行緒中的執行緒池、顯示卡的驅動程式物件、印表機的後台處理服務、應用程式的日誌物件、資料庫的連線池、**的計數器、web 應用的配置物件、應用程式中的對話方塊、系統中的快取等常常被設計成單例。

三個特點:

單例類只有乙個例項物件;

該單例物件必須由單例類自行建立;

單例類對外提供乙個訪問該單例的全域性訪問點。

單例模式的結構與實現

單例模式是設計模式中最簡單的模式之一。通常,普通類的建構函式是公有的,外部類可以通過「new 建構函式()」來生成多個例項。但是,如果將類的建構函式設為私有的,外部類就無法呼叫該建構函式,也就無法生成多個例項。這時該類自身必須定義乙個靜態私有例項,並向外提供乙個靜態的公有函式用於建立或獲取該靜態私有例項

下面來分析其基本結構和實現方法。

1.單例模型的結構

單例模式的主要角色:單例類,包含乙個例項且能自行建立這個例項的類;訪問類,使用單例的類。結構如下圖所示。

2.單例模型的實現

singleton模式通常有兩種實現形式。

第一種:懶漢式單例

該模型的特點是類載入時沒有生成單例,只有當第一次呼叫getinstance方法時才會建立這個單例。**如下:

public

class

lazysingleton

//private 避免類在外部被例項化

public

static

synchronized

lazysingleton getinstance()

return

instance;}}

第二種:餓漢式單例

該模式的特點是類一旦載入就建立乙個單例,保證在呼叫 getinstance 方法之前單例已經存在了。

ublic class

hungrysingleton

public

static

hungrysingleton getinstance()

}

餓漢式單例在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,所以是執行緒安全的,可以直接用於多執行緒而不會出現問題。

單例模式的應用例項

【例1】用懶漢式單例模式模擬產生美國當今**物件

分析:在每一屆任期內,美國的**只有一人,所以本例項適合用單例模式實現,下圖所示是用懶漢式單例實現的結構圖。

程式**如下:

package

test;

public

class

singletonlazy

else

}}class

president

public

static

synchronized

president getinstance()

else

return

instance;

}public

void

getname()

}

程式執行結果如下:

產生乙個**

我是現任**

已經有乙個新**,不能產生新**

我是現任**

同乙個人

改成餓漢式

package

test;

public

class

singletonhungry

else

}

}class

president

public

static

president getinstance()

public

void

getname()

}

執行結果如下:

產生乙個**

我是現任**

我是現任**

同乙個人

前面分析了單例模式的結構與特點,以下是它通常適用的場景的特點。

單例模式可擴充套件為有限的多例(multitcm)模式,這種模式可生成有限個例項並儲存在 armylist 中,客戶需要時可隨機獲取,其結構圖如圖所示。

建立型模型 單例模式

單例模式是一種常用的軟體設計模式。在它的核心結構中只包含乙個被稱為單例的特殊類。通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於外界訪問,從而方便對例項個數的控制並節約系統資源。如果希望在系統中某個類的物件只能存在乙個,單例模式是最好的解決方案。singleton 單例 在單例類的內部實現...

設計模式 建立型模式 單例模式

類載入時建立物件 常量 class eagersingleton public static eagersingleton getinstance 延遲載入 假如在某一瞬間 執行緒a 和 執行緒b 都在呼叫getinstance 方法,此時instance物件為null值,均能通過instance ...

設計模式建立型模式 單例模式

單例模式 singletonparrten 保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點 建立單例模式需要三方面操作 1.建立乙個物件 2.定義乙個私有構造方法 禁止外部類對其進行例項化 3.提供乙個對外訪問的方法 單例模式可以通過懶漢式和餓漢式來實現。懶漢式 執行緒不安全 懶漢式 單例模...