享元模式(Flyweight Pattern)主要用于減少建立對象的數量,以減少記憶體占用和提高性能。這種類型的設計模式屬于結構型模式,它提供了減少對象數量進而改善應用所需的對象結構的方式。
享元模式嘗試重用現有的同類對象,如果未找到比對的對象,則建立新對象。我們将通過建立 5 個對象來畫出 20 個分布于不同位置的圓來示範這種模式。由于隻有 5 種可用的顔色,是以 color 屬性被用來檢查現有的 Circle 對象。

1、系統中有大量對象。
2、這些對象消耗大量記憶體。
3、這些對象的狀态大部分可以外部化。
4、這些對象可以按照内蘊狀态分為很多組,當把外蘊對象從對象中剔除出來時,每一組對象都可以用一個對象來代替。
5、系統不依賴于這些對象身份,這些對象是不可分辨的。
優點:
1)享元模式的優點在于它可以極大減少記憶體中對象的數量,使得相同對象或相似對象在記憶體中隻儲存一份。
2)享元模式的外部狀态相對獨立,而且不會影響其内部狀态,進而使得享元對象可以在不同的環境中被共享。
缺點:
1)享元模式使得系統更加複雜,需要分離出内部狀态和外部狀态,這使得程式的邏輯複雜化。
2)為了使對象可以共享,享元模式需要将享元對象的狀态外部化,而讀取外部狀态使得運作時間變長。