設計模式 (7) - Flyweight/享元模式

問題描述

一個系統中可能創建某類型的大量實例,有什麼方法可以節約內存開銷呢?

享元模式

如圖所示,享元模式劃分對象的內部狀態和外部狀態,外部狀態和對象的運行上下文相關;把外部狀態封裝成爲對象的接口參數傳遞到對象的方法調用中。對象方法依據對象的內部狀態和參數所代表的外部狀態來執行相關邏輯。由於外部狀態由客戶計算或者保持,而內部狀態又相對穩定,因此改對象的實例個數相對較少。這種對象屬性的劃分方法,減少了對象實例的個數。想象一下,如果對象保持內部狀態和外部狀態,由於外部狀態的多樣性,對象的實例個數相對更多。通過FlyweightFactory對象來管理對象實例並支持對象的共享,可以進一步減少內存開銷。


討論

享元模式的價值在於:劃分對象的本質屬性(內在屬性)和外部屬性,外部屬性由客戶維護並作爲參數傳入--這既保持了對象的細粒度也讓對象的屬性相對穩定;通過FlyweightFactory來管理對象的實例化,這使得對象共享成爲可能。這些措施都可以減少系統內存開銷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章