FactoryMethodパターン@Java言語で学ぶデザインパターン入門

Java画像

参考にした本

以下の書籍を参考に本記事を書きました。

FactoryMethodパターンとは

参考書では以下のように説明されています。

インスタンスの作り方をスーパークラスの側で定めますが、具体的なクラス名まではありません。

これによって、インスタンス生成のための枠組みと、実際のインスタンス生成のクラスを分けて考えることができます。

メリット

  1. 具体的なクラス名による束縛からスーパークラスを解放できる

詳細はサンプルプログラムを見た後に解説します。

サンプルプログラム

クラス図は以下の通り

Factoryクラス

このクラスでインスタンス生成の枠組みを定義します。

Facoryクラスは抽象クラスなので、コンストラクタはありません。

またこのクラスではtempalteMethodパターンが使われています。

templateMethodパターンの詳細は以下の記事を参照してください。

image TemplateMethodパターン@Java言語で学ぶデザインパターン入門

Productクラス

Factoryクラスによって作られる製品を表現したクラスです。

抽象メソッドuse()のみが定義されています。

具体的な処理はサブクラスにお任せします。

Televisionクラス

実際に作られる製品(テレビ)のクラスです。

メーカーとシリアルナンバーを変数としてもっています。

TelevisionFactoryクラス

実際にテレビを作成するFactoryクラスです。

コンストラクタでメーカーとシリアルナンバーを定義しています。

Mainクラス

出力は以下の通り

メリットの振り返り

①具体的なクラス名による束縛からスーパークラスを解放できる

Mainクラスを見てみると、Televisionをnewしている箇所がありません。

全てTelevisionFactoryクラスから作られています。

MainクラスはTelevisionクラスのことを全く知りません。

これによってテレビ以外のProductを作成するのがとても簡単になります。

例えば、冷蔵庫を作りたければ、新たにpackage冷蔵庫、冷蔵庫クラス、冷蔵庫Factoryクラスを作るだけで良いです:)

static Factory Methodについて

javaにはFactoryMethodパターンに似たAPIがたくさん存在します。

・getInstanceメソッド

https://docs.oracle.com/javase/jp/8/docs/api/java/security/SecureRandom.html

・ofメソッド

https://docs.oracle.com/javase/jp/9/docs/api/java/util/List.html#of-E…-

などなど。。。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


error: Content is protected !!