オブジェクト指向の手本、デザインパターン

2009年5月12日(火)
清水 英雄

FactoryMethodパターン サンプルコードUML

 UML(図3)をご覧ください。四角で囲まれた部分が1つのクラスを表しています。白い三角形で継承関係を示しています。また、斜字体のクラスは、それ自身インスタンスを作ることができない抽象クラスです。

 まず、作成者クラスについて。作成者は斜字体で表現、これは抽象化されているクラスを意味します。すし職人クラス、ケーキ職人クラスは作成者クラスの具象クラスとなります。

 作成者クラスは抽象化しておき、必要なメソッドをまとめます。すし職人、ケーキ職人といった具象クラスは、作成者のサブクラスとなります。

 生成物クラスも同様に抽象化しておき、具象生成物(生成物_おすし、生成物_ケーキ)で必要となるメソッド・プロパティなどを事前に決定しておきます。

サブクラスにインスタンスを委ねるのがポイント

 ここでポイントとなるのは、具象生成者(すし職人、ケーキ職人)のFactoryMethod()というメソッドです。ここで、生成物のインスタンスを生成します。

 FactoryMethodは作成者とその生成物のクラスが存在し、それぞれ作成者で生成する生成物は、具象生成者(すし職人、ケーキ職人)ここではすし職人、ケーキ職人に作成すべきインスタンス生成を委ねます。オブジェクトを生成するためには、そのオブジェクトの型を知っている必要があります。

 サンプルのFactoryMethodでは、製品を生成するのは作成者の派生クラスの役割です。上記の場合、すし職人は、すしのクラスを生成し、ケーキ職人はケーキのクラスを生成します。すし職人がケーキを生成するというような、誤ったインスタンスを生成することはありません。

 作成者クラスの数が多い場合など、作成者だけで作成されるもの(生成物)がわかることは、プログラミング上非常に有効になってきます。FactoryMethodのメリットは、作成者とその生成物の組み合わせを意識する必要がなくなる、ということではないでしょうか。

本記事のサンプルコードのダウンロードはこちらから:http://thinkit.co.jp/sites/default/files/download/22913_samplecode.zip

Rarestyle
MR(医薬情報担当者)・微生物研究員を経て、化学系会社にシステム担当として従事し、システムマネジメントやインフラ整備などを行う。微生物研究員時代から数値解析など通じてプログラミングを学び、現在、Webサイト「Rarestyleへようこそ(http://www.rarestyle.net/)」を立ち上げ、パソコンコミュニティー活動・人材教育にも力を入れている。

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

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

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

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