31.2 物件池模式
31.2.1 定義和類圖
(1)定義:物件池是一種設計模式,它通過管理有限物件復用來共享某些稀少或必須付出昂貴代價的資源。
(2)類圖:
31.2.2 物件池的擴充套件介面
(1)兩級物件池方式:空閒物件池和已用物件池
,使附加一些屬性(如空閒時間)
class(3)空閒物件池:存放目前還沒有分配出去的空閒復用物件;
(4)己用物件池:存放正在被客戶端使用的連線。
31.2.3 復用物件的建立和消亡
model)
return
ret;}
(3)獲取的復用物件:在需要乙個reusable物件時,客戶端呼叫acquirereusable方法。如果池是空的,那麼acquirereusable方法建立乙個reusable物件(如果能夠),否則,就等待知道有reusable物件返回集合。
31.2.4 manager object的管理策略
(1)物件的產生策略
①void setinitpoolsize();//定義物件池初始化時預設的物件數量
②void createbystrategy();//採用何種策略建立空閒物件
(2)物件的**策略
①客戶通過acquiredreusable獲得乙個復用物件,然後在使用完後主動歸還得復用物件。
(3)物件的消亡策略
①當復用物件數量超過額定值時,系統歸還當前空閒復用物件所佔資源以減輕系統 的負擔。
②策略:如一次性將空閒物件全部**或部分**。
【程式設計實驗】模擬乙個資料庫連線池進行實現
新設計模式——物件池模式
//場景:資料庫連線池
#include #include
#include
using
namespace
std;
typedef
void
object;
//使用者需要的實際的東西都要實現這個介面
class
iconnection;//
實現類:使用者真正需要的東西,比如資料庫連線
class connection : public
iconnection
void setconnection(object*obj)
};//
池子中放的東西(具有狀態及使用者實際需要的東西)
class
poolitem
bool isuse()
void setisuse(bool
value)
iconnection*getconnection()
};//
池子管理物件
class
poolmanager
//釋放物件(多執行緒時可考慮同步)
void release(iconnection*conn)
++iter;}}
//得到池中的物件(多執行緒時可考慮同步)
iconnection* get
()
++iter;
}return
ret;
}};//
連線池物件(使用者真正需要關心的池子)
class
connectionpool
}//得到連線物件
static iconnection*getconnection()
//釋放連線
static
void release(iconnection*conn)
//清除所有連線
static
void
clearconnection()
};poolmanager connectionpool::manager;
intmain()
;31.2.5 小結(1)該模式通過定義6個介面和兩個抽象擴充套件物件(realobjectcreator和poolmanager)。通過實現realobjectcreator抽象物件,可以將整個物件池模式擴充套件到新的應用領域。
(2)通過實現poolmnanger抽象物件,可以針對不同的不物件實現不同的管理策略,來完成復用物件的建立、消亡和管理等諸多任務作。
分類:
設計模式
物件池模式
物件池是使用成員變數來儲存生成的物件 1 我需要乙個放入池中的物件 public class teacher 2 我需要池中物件的狀態 public class objectstatus 釋放 public void release 檢查是否可用 return public boolean chec...
設計模式 物件池模式
物件池模式,也稱物件池服務,通過迴圈使用物件,減少資源在初始化和釋放時的昂貴損耗。簡單地說,在需要時,從池中提取 不用時,放回池中,等待下乙個請求。典型例子是連線池和執行緒池。從hashtable中取出空閒元素 public synchronized t checkout return null 歸...
25 物件池模式(新)
物件池模式,或者稱為物件池服務,其意圖如下 通過迴圈使用物件,減少資源在初始化和釋放時的昂貴損耗 物件池示例 public abstract class objectpool 從hashtable中取出空閒元素 public synchronized t checkout return null 歸...