PR

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

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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