物件導向的代價:
物件導向很好的解決了系統抽象問題,同時在大多數情況下,也不會損及系統的效能。但是,在某些特殊的應用中,由於物件的數量太大,採用物件導向會給系統帶來難以承受的記憶體開銷。比如圖形應用中的圖元等物件、字處理應用中的字元物件等。
動機(motivation)
採用純粹物件方案的問題在於大量細粒度的物件會很快充斥在系統中,從而帶來很高的執行時代價--主要指記憶體需求方面的代價。
如何在避免大量細粒度物件問題的同時,讓外部客戶程式仍然能夠透明地使用物件導向的方式來進行操作?
意圖(intent)
運用共享技術有效的支援大量細粒度的物件。
結構(structure)
flyweight模式的幾個要點:
物件導向很好的解決了抽象性的問題,但是作為乙個執行在機器中的程式實體,我們需要考慮物件的代價問題。flyweight模式主要解決物件導向的代價問題,一般不觸及物件導向的抽象性問題。
flyweight採用物件共享的做法來降低系統中物件的個數,從而降低細粒度物件給系統帶來的記憶體壓力。在具體實現方面,要注意物件狀態的處理。
物件的數量太大從而導致物件記憶體開銷太大--什麼樣的數量才算大?這需要我們仔細的根據具體情況進行評估,而不能憑空臆斷。
Gof 享元模式
繼續打卡設計模式 今天來聊一下享元模式 享元模式 也叫蠅量模式,運用共享技術有效支援大量細粒度的物件 常用於底層系統開發,解決系統的效能問題,像資料庫連線池。首先提出乙個實際的需求 有客戶要求以新聞的形式發布 有客戶人要求以部落格的形式發布 那麼現在解決這個問題我們出發點可能就是說在把原來的東西複製...
設計模式之享元模式
1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...
設計模式之 享元模式
享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...