2015-06-09 60 views
3

就我的理解,輕量級設計模式與工廠或單件設計模式沒有太大的區別。(GoF)Flyweight爲什麼是結構(而不​​是創造性)設計模式?

它只是一個產生不可變(和池)對象的工廠。 它只是一個單例,爲每個類型(被管理對象)提供一個實例,而不是全局單個實例。

工廠和單件是創建模式,所以爲什麼應該把輕量級視爲結構模式?

+1

一方面,模式的分類並不那麼重要,並且在某些情況下可能首先顯得任意。另一方面,我不同意這樣說:「這只是一個生產不可變對象的工廠」。 * GoF中的Abstract Factory *和* Factory Method *有更多的上下文。很多人混淆*簡單工廠*和*工廠方法*。 – Fuhrmanator

回答

4

享元模式的本質不是創造物體,而是分享它們。該模式指出要共享的對象通常保存在某個外部數據結構中,但沒有指定如何創建或表示這些數據結構。

什麼使模式結構是使用工廠類來獲取flyweights。這在設計上強加了一個靜態結構。

1

flyweight模式不會創建任何對象。它用於存儲多個對象之間共享的數據。您可以將它的用法與類中的靜態方法/變量進行比較。不必爲每個實例定義它們,您可以使用包含此方法或數據的全局實例來減少應用程序的內存佔用量。

假設您使用多個解析器解析大型數據文件,而不是讓每個解析器讀取完整的數據文件,您可以使用flyweight模式來保存每個解析器可以訪問的數據文件的單個實例。