Object Poolパターン

2009年5月14日(木)
鈴村 幸太郎

Object Poolの実装

 Object Poolを実際に利用するには、独自に実装する方法もありますが、汎用的に利用できるObject Poolを提供するライブラリが存在します。ここでは、オープンソースのApacheプロジェクトのcommons-poolの実装とその利用方法を紹介します。

 commons-poolは、Object Poolを実装するためのインターフェースと標準的な実装クラスのいくつかを用意しています。Object Poolインターフェースは2ページ目の図2(http://thinkit.jp/article/934/2/)のReusableクラスに相当するクラスを実装するためのインターフェースです。commons-poolでは、Object Poolの実装がいくつか用意されていますが、もっとも簡単に利用できる実装として、GenericObjectPoolクラスが提供されています。プールからオブジェクトを取得するためのメソッドがborrowObjectです。プールにオブジェクトを戻すためのメソッドがreturnObjectです。オブジェクトプールの利用を終了してプールにあるオブジェクトをすべて消去するためのメソッドがcloseです。GenericObjectPoolクラスは、Singletonにはなっていませんが、Singletonパターンを適用して、GenericObjectPoolのインスタンスを1つに制限することで、図2の場合と同様なオブジェクトプールにすることも可能です。

 commons-poolでは、プールするためのオブジェクトを生成する部分でFactory Methodパターン(*4)も利用しています。PoolableObjectfactoryは、プールするオブジェクトを生成するためのFactoryクラスを実装するためのインターフェースです。commons-poolを利用する場合、PoolableObjectFactoryを実装して、プールするオブジェクトを生成するクラスを作成します。図3では、例としてプールするオブジェクトをPooledObject、PooledObjectを生成するFactoryクラスをPooledObjectFactoryという名称にしてあります。PoolableObjectFactoryのFactoryメソッド(オブジェクトを生成して返すメソッド)は、makeObjectです。そのほかにオブジェクトを利用状態にするactivateObjectメソッド、オブジェクトを利用可能(未使用状態)にするpassivateObjcetメソッド、オブジェクトを消去するためのdestoryObjectメソッドなどが定義されています。

*4:Factory Methodパターン:GoFの23のパターンで紹介されているデザインパターンです。

Object PoolパターンとFactory Methodパターンの組み合わせ

 もっともシンプルにCommons-Poolを利用するには、図3において、PooledObjectとPooledObjectFactoryに相当するクラスを作成し、GenericObjectPoolを生成した後にsetFactoryメソッドで、作成したPooledObjectFactoryを渡します。Client、またはborrowObjectメソッドの内部からaddObjectメソッドが呼ばれると、PooledObjectFactoryを利用して、オブジェクトを生成して利用します。Factoryパターンと組み合わせたことで、commons-poosが提供する既存のGenericObject Poolを使って、ユーザーが定義したクラスをオブジェクトプールにすることができます。

 このように、Object Poolパターンは、Factory Methodパターンと組み合わせて利用されることで、汎用的に利用できるオブジェクトプールを提供できます。


【参考文献】
アランシャロウェイ、ジェームズ.R.とロット(原著),村上 雅章(翻訳)『オブジェクト指向のこころ』ピアソン・エデュケーション(発行年:2005)

「Apache Commons - commons pool」
http://commons.apache.org/pool/
(アクセス:2009/05)

株式会社クラウズ
(株)クラウズ 取締役・CKO(Chief Knowledge Officer) 技術士(情報工学)大手シンクタンクでシステム開発や技術支援を経験し、現在はIT教育トレーナーや、技術支援のITコンサルタントとしても活動中。得意分野はオブジェクト指向やWebシステム、データベースなど。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています