享元模式(flyweight design pattern)是池技術的重要實現方式。定義為:使用共享的物件可有效地支援大量的細粒度的物件。
所謂 「享元」,顧名思義就是被共享的單元。享元模式的意圖是復用物件,節省記憶體,前提是享元物件是不可變物件。
享元模式是乙個非常簡單的模式,它可以大大減少應用程式建立的物件,降低程式記憶體的占用,增強程式的效能,但它同時也提高了系統複雜性,需要分離出外部狀態和內部狀態,而且外部狀態具有固化特性,不應該隨內部狀態改變而改變,否則導致系統的邏輯混亂。
系統中存在大量的相似物件。
細粒度的物件都具備較接近的外部狀態,而且內部狀態與環境無關,也就是說物件沒有特定身份。
需要緩衝池的場景。
在單例模式中,乙個類只能建立乙個物件,而在享元模式中,乙個類可以建立多個物件,每個物件被多處**引用共享。實際上,享元模式有點類似於之前講到的單例的變體:多例。
在享元模式的實現中,通過工廠類來 「快取」 已經建立好的物件。這裡的 「快取」 實際上是 「儲存」 的意思,跟平時所說的 「資料庫快取」 「cpu 快取」 「memcache 快取」 是兩回事。平時所講的快取,主要是為了提高訪問效率,而非復用。
雖然物件池、連線池、執行緒池、享元模式都是為了復用,但是,如果再細緻地摳一摳 「復用」 這個字眼的話,物件池、連線池、執行緒池等池化技術中的 「復用」 和享元模式中的 「復用」 實際上是不同的概念。
池化技術中的 「復用」 可以理解為 「重複使用」 ,主要目的是節省時間(比如從資料庫池中取乙個連線,不需要重新建立)。在任意時刻,每乙個物件、連線、執行緒,並不會被多處使用,而是被乙個使用者獨佔,當使用完成之後,放回到池中,再由其他使用者重複利用。享元模式中的 「復用」 可以理解為 「共享使用」 ,在整個生命週期中,都是被所有使用者共享的,主要目的是節省空間。
設計模式(享元模式)
享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...
設計模式 享元模式
享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...
設計模式 享元模式
舉個圍棋的例子,圍棋的棋盤共有361格,即可放361個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...