設計模式之美21 享元模式

2021-10-09 05:42:17 字數 695 閱讀 9419

1.享元模式的原理

所謂「享元」,顧名思義就是被共享的單元。享元模式的意圖是復用物件,節省記憶體,前提是享元物件是不可變物件。

具體來講,當乙個系統中存在大量重複物件的時候,如果這些重複的物件是不可變物件,我們就可以利用享元模式將物件設計成享元,在記憶體中只保留乙份例項,供多處**引用。這樣可以減少記憶體中物件的數量,起到節省記憶體的目的。實際上,不僅僅相同物件可以設計成享元,對於相似物件,我們也可以將這些物件中相同的部分(字段)提取出來,設計成享元,讓這些大量相似物件引用這些享元。

這裡我稍微解釋一下,定義中的「不可變物件」指的是,一旦通過建構函式初始化完成之後,它的狀態(物件的成員變數或者屬性)就不會再被修改了。所以,不可變物件不能暴露任何set()等修改內部狀態的方法。之所以要求享元是不可變物件,那是因為它會被多處**共享使用,避免一處**對享元進行了修改,影響到其他使用它的**。

2.享元模式的實現

享元模式的**實現非常簡單,主要是通過工廠模式,在工廠類中,通過乙個map或者list來快取已經建立好的享元物件,以達到復用的目

的。3.享元模式vs單例、快取、物件池

我們前面也多次提到,區別兩種設計模式,不能光看**實現,而是要看設計意圖,也就是要解決的問題。這裡的區別也不例外。我們可以用簡單幾句話來概括一下它們之間的區別。

設計模式之美 Flyweight(享元)

索引 意圖 結構參與者 適用性效果 相關模式 實現實現方式 一 使用 flyweightfactory 管理 flyweight 物件。意圖 運用共享技術有效地支援大量細粒度的物件。use sharing to support large numbers of fine grained object...

設計模式之享元模式

1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...

設計模式之 享元模式

享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...