【Abstract Factoryパターン】コンポジットの部品変更を容易にするデザインパターン【コード例:Java】

前書き:Abstract Factoryパターンとは

Abstract Factoryパターンは、関連するインスタンスの生成APIを抽象化クラスに集約し(= 生成に関するインターフェースを定義し)、生成処理は抽象化クラスを継承(実装)したクラスに任せる設計手法です。

Abstract Factoryパターンを利用するメリットは、以下の3点です。

Abstract Factoryパターンのメリット
  • 複雑な生成処理をパターン化可能
  • コンポジットクラス内に存在するインスタンスグループを変更/追加しやすい
  • あるインスタンスグループを変更/追加しても、他のインスタンスグループに影響がない

本記事では、Abstract Factoryのクラス図、実装例を示します。

                                       

Abstract Factoryパターンのクラス図

クラス名 説明
Client AbstractFactoryを用いて、各インスタンスを生成するクラス
AbstractFactory 各部品(インスタンス)の生成方法を定義した抽象クラス
AbstractProductA 部品(抽象)
AbstractProductB 部品(抽象)
FactoryA 各部品(インスタンス)の生成方法を定義したクラス
ProductA 部品
ProductB 部品

                                

Abstract Factoryパターンの実装例

Abstract Factoryの実装例として、Bash/Pythonのスクリプトファイルを作成する処理を実装します。工場が生成する部品は、

  • シェバン(スクリプト一行目の文字列)を生成するインスタンス
  • スクリプトの実処理(標準出力を行う命令文)を生成するインスタンス
  • スクリプトファイルを作成するインスタンス

の3点です。

紹介するサンプルコードは、クラス図で表すと以下の構成になります。

                        

実装例:抽象クラス

                                         

実装例:Bashスクリプト作成クラス群

                                 

実装例:Pythonスクリプト作成クラス群

                                              

実装例:Abstract Factoryの利用者

各インスタンスの生成処理がAbstract Factoryパターンによって統一されているため、Bashスクリプト作成もPythonスクリプト作成も、同じ手順で行なえます。

そのため、Iteratorパターンを使って、スクリプト2点をループ処理内で作成できます。

                                       

実行例

上記のクラスをビルド後、jarファイルを実行すると、以下のファイル2点(bash.sh、python.py)が生成されます。

                                 

Abstract Factoryパターンのデメリット

Abstract Factoryパターンのデメリット
  • 関連するインスタンス(部品)の数が増えると複雑化
  • インスタンス(部品)の種類を増やした場合、全てのFactoryに影響

                                                                 

他のデザインパターンに関して

GoFデザインパターン(23種類)に関しては、以下の記事でまとめてあります。

【オブジェクト指向】全23種類のGoFデザインパターンに関する説明と参考書籍

                                                                   

おすすめ

1件の返信