一、享元模式概念
1.1 什麼是享元模式
享元模式是一種結構型設計模式,旨在透過共享物件來最大程度地減少記憶體使用和提高效能。在享元模式中,物件被設計成可共享的,以便在需要時能夠被多個不同的上下文使用。
結構
享元模式通常包含以下幾個要素:
-
Flyweight(享元): 定義了共享物件的介面,包含了需要被共享的狀態。透過這些介面,享元物件可以接受並作用於外部狀態。
-
ConcreteFlyweight(具體享元): 實現了享元介面,表示可被共享的具體物件。具體享元物件中包含了內部狀態,而外部狀態則由客戶端在使用時傳遞給享元物件。
-
UnsharedConcreteFlyweight(非共享具體享元): 不可被共享的具體物件,通常是一些不可複用的物件,其中包含了不適合被共享的狀態。
-
FlyweightFactory(享元工廠): 負責建立和管理享元物件。當客戶端請求一個享元物件時,享元工廠負責檢查是否已經有相應的享元物件存在,如果存在則返回已有的物件,如果不存在則建立一個新的享元物件並將其加入到享元池中。
-
Client(客戶端): 使用享元模式的客戶端。客戶端通常會維護一些外部狀態,並在需要時將這些狀態傳遞給享元物件。
二、享元模式程式碼
三、總結
享元模式的優點包括:
- 大大減少了物件的數量,節省了記憶體空間。
- 提高了系統的效能,因為共享物件可以被多個客戶端同時使用。
缺點包括:
- 需要對外部狀態進行管理,可能會增加系統的複雜性。
- 共享物件的狀態改變可能會影響到其他使用該物件的客戶端。