[Design Patterns] 享元模式(Flyweight Pattern)

設計模式類的文章不好寫,討論也不容易,安西教練! 我好想寫設計模式文...

在此謝謝朋友們對大今的支持!
告訴大家一個好消息!
大今拉麵一律特別價99元!!

 

享元模式優點:

減少記憶體使用量、節省建構物件時間成本

使用情境:

物件頻繁被引用,且每次提供的資訊都不會改變

成員:

  1. 共享物件之型別:通常這類型別之物件,需要一直被引用,但沒必要每次都重新建構。
  2. 共享物件之抽象型別:被共享的物件之型別的公共接口。
  3. 共享物件工廠型別:負責共享物件的建立與取得方法,這個型別可以獨體,沒必要存在多於的實例。
  4. 客戶端:依賴工廠進行獲取共享物件的角色 

案例

我們試著想想看線上遊戲「角子老虎機」的情境

  • 用戶端每次透過SPIN請求獲取隨機產生的圖案
  • 伺服器端隨機產出20個圖案

探索

看到這邊大家是否認為 Thread Pool 以及 Connection Pool 很像享元模式 《先別急著下定論》

思考一下Connection Pool 在提供過程是不是因該要有一個機制,避免多個線程跟Pool取得連線資源時,同時拿到同一個連線資源 《先別急,想好在往下看》

參考

What are the differences between Flyweight and Object Pool patterns?