【設計模式】Java設計模式之享元模式

目錄

一、爲什麼使用享元模式

二、模式定義

三、模式結構

四、模式優點

五、模式缺點

六、模式適用環境


一、爲什麼使用享元模式

享元模式(Flyweight Pattern) 也叫蠅量模式;運用共享技術有效地支持大量細粒度的對象

常用於系統底層開發,解決系統的性能問題。像數據庫連接池,裏面都是創建好的連接對象,在這些連接對象中有我們需要的則直接拿來用,避免重新創建,如果沒有我們需要的,則創建一個

享元模式能夠解決重複對象的內存浪費的問題, 當系統中有大量相似對象,需要緩衝池時。不需總是創建新對象,可以從緩衝池裏拿。這樣可以降低系統內存,同時提高效率

享元模式經典的應用場景就是池技術了,String常量池、數據庫連接池、緩衝池等等都是享元模式的應用,享元模式是池技術的重要實現方式

二、模式定義

享元模式(Flyweight Pattern):運用共享技術有效地支持大量細粒度對象的複用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次複用。由於享元模式要求能夠共享的對象必須是細粒度對象,因此它又稱爲輕量級模式,它是一種對象結構型模式

三、模式結構

享元模式包含如下角色:
Flyweight: 抽象享元類
ConcreteFlyweight: 具體享元類
UnsharedConcreteFlyweight: 非共享具體享元類
FlyweightFactory: 享元工廠類
享元模式是一個考慮系統性能的設計模式,通過使用享元模式可以節約內存空間,提高系統的性能

四、模式優點

享元模式的優點在於它可以極大減少內存中對象的數量,使得相同對象或相似對象在內存中只保存一份。
享元模式的外部狀態相對獨立,而且不會影響其內部狀態,從而使得享元對象可以在不同的環境中被共享

五、模式缺點

享元模式使得系統更加複雜,需要分離出內部狀態和外部狀態,這使得程序的邏輯複雜化
爲了使對象可以共享,享元模式需要將享元對象的狀態外部化,而讀取外部狀態使得運行時間變長

六、模式適用環境

在以下情況下可以使用享元模式:
一個系統有大量相同或者相似的對象,由於這類對象的大量使用,造成內存的大量耗費。
對象的大部分狀態都可以外部化,可以將這些外部狀態傳入對象中。
使用享元模式需要維護一個存儲享元對象的享元池,而這需要耗費資源,因此,應當在多次重複使用享元對象時才值得使用享元模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章