重學設計模式 - Object Pool模式

1、意圖

在創建對象比較昂貴,或者對於特定類型能夠創建的對象數目有限制時,管理對象的重用。

2、問題

對象的創建和/或管理必須遵循一組定義明確的規則集。通常這些規則都與如何創建對象、能夠創建多少個對象和在已有對象完成當前任務時如何重用它們等等相關。

3、通用結構

4、解決方案

在需要一個Reusable對象時,Client調用ReusablePool的AcquireReusable方法。如果池是空的,那麼AcquireReusable方法創建一個Reusable對象(如果能夠),否則,就等待知道有Reusable對象返回集合。

5、參與者與協作

ReusablePool管理着Client所用的Reusable對象的可用性。Client然後在一個有限的時間段內使用Reusable對象的實例,ReusablePool包含所有Reusable對象,這樣就可以對其以統一的方式進行管理。

6、效果

最適用於對對象的需求一直非常穩定的時候,需求變化太大會帶來性能問題。ObjectPool中爲了解決這一問題,限制了能夠創建的對象數量。使管理實例創建的邏輯與實例被管理的類分離,可以得到內聚更好的設計。

7、實現

如果可以創建的對象數量有限制,或者池的大小有限制,可以使用一個簡單的數組來實現池。否則,使用vector對象,負責管理對象池的對象必須是唯一能夠創建這些對象的對象。ReusablePool是使用Singleton模式實現的。另一種變體是在Reusable對象中加一個釋放方法---讓它自己返回到池。

 

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