設計模式 7 Flyweight 享元模式

2021-07-03 23:43:23 字數 598 閱讀 9250

問題描述

乙個系統中可能建立某型別的大量例項,有什麼方法可以節約記憶體開銷呢?

享元模式

如圖所示,享元模式劃分物件的內部狀態和外部狀態,外部狀態和物件的執行上下文相關;把外部狀態封裝成為物件的介面引數傳遞到物件的方法呼叫中。物件方法依據物件的內部狀態和引數所代表的外部狀態來執行相關邏輯。由於外部狀態由客戶計算或者保持,而內部狀態又相對穩定,因此改物件的例項個數相對較少。這種物件屬性的劃分方法,減少了物件例項的個數。想象一下,如果物件保持內部狀態和外部狀態,由於外部狀態的多樣性,物件的例項個數相對更多。通過flyweightfactory物件來管理物件例項並支援物件的共享,可以進一步減少記憶體開銷。

討論

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

設計模式 享元模式 flyweight

實際上就是通過乙個容器儲存物件,等到需要用的時候,再獲取物件的引用 減少物件數量,節省記憶體空間維護共享物件需要額外開銷,如需要專門設定乙個執行緒來 main public class main abs flyweight public abstract class flyweight imp co...

設計模式 享元模式Flyweight

定義 運用共享技術有效支援大量細粒度的物件 有乙個享元工廠,用來建立並管理flyweight物件。它主要是確保合理共享flyweight,當使用者請求乙個flyweight時,flyweight工廠物件提供乙個已知建立的例項或者建立乙個 內部狀態和外部狀態 在享元物件內部並且不會隨環境變化而變化的共...

flyweight(享元模式)設計模式

flyweight設計模式就是享元模式。首先我先舉個例子,看下面一段 public static void main string arg 輸出的結果是什麼?true or false?在看下面的一段程式 public static void main string arg 輸出的結果是什麼?tru...