目錄
一、爲什麼使用享元模式
二、模式定義
三、模式結構
四、模式優點
五、模式缺點
六、模式適用環境
一、爲什麼使用享元模式
享元模式(Flyweight Pattern) 也叫蠅量模式;運用共享技術有效地支持大量細粒度的對象
常用於系統底層開發,解決系統的性能問題。像數據庫連接池,裏面都是創建好的連接對象,在這些連接對象中有我們需要的則直接拿來用,避免重新創建,如果沒有我們需要的,則創建一個
享元模式能夠解決重複對象的內存浪費的問題, 當系統中有大量相似對象,需要緩衝池時。不需總是創建新對象,可以從緩衝池裏拿。這樣可以降低系統內存,同時提高效率
享元模式經典的應用場景就是池技術了,String常量池、數據庫連接池、緩衝池等等都是享元模式的應用,享元模式是池技術的重要實現方式
二、模式定義
享元模式(Flyweight Pattern):運用共享技術有效地支持大量細粒度對象的複用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次複用。由於享元模式要求能夠共享的對象必須是細粒度對象,因此它又稱爲輕量級模式,它是一種對象結構型模式。
三、模式結構
![]()
享元模式包含如下角色:
• Flyweight: 抽象享元類
• ConcreteFlyweight: 具體享元類
• UnsharedConcreteFlyweight: 非共享具體享元類
• FlyweightFactory: 享元工廠類
享元模式是一個考慮系統性能的設計模式,通過使用享元模式可以節約內存空間,提高系統的性能。
四、模式優點
• 享元模式的優點在於它可以極大減少內存中對象的數量,使得相同對象或相似對象在內存中只保存一份。
• 享元模式的外部狀態相對獨立,而且不會影響其內部狀態,從而使得享元對象可以在不同的環境中被共享。
五、模式缺點
• 享元模式使得系統更加複雜,需要分離出內部狀態和外部狀態,這使得程序的邏輯複雜化。
• 爲了使對象可以共享,享元模式需要將享元對象的狀態外部化,而讀取外部狀態使得運行時間變長
六、模式適用環境
在以下情況下可以使用享元模式:
• 一個系統有大量相同或者相似的對象,由於這類對象的大量使用,造成內存的大量耗費。
• 對象的大部分狀態都可以外部化,可以將這些外部狀態傳入對象中。
• 使用享元模式需要維護一個存儲享元對象的享元池,而這需要耗費資源,因此,應當在多次重複使用享元對象時才值得使用享元模式