PHP7でデザインパターン入門8/23 Abstract Factoryパターン

Abstract Factory パターンとは

関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。

Abstract Factory パターン - Wikipedia

example

サンプルプログラムは階層構造を持ったリンク集をHTMLファイルとして作る、というもの。 ファイル数が多いため、github上にアップした。

github.com

今までのデザインパターンと比較して、Abstract Factoryはとても込み入っている。

サンプルでは5つの抽象クラスが登場する。

  • Item
  • Link
  • Tray
  • Page
  • Factory

Abstract Factoryパターンでは、抽象的な工場が登場し、抽象的な部品を組み合わせることで抽象的な製品を作り出す。

つまり、部品の具体的な実装には注目せず、インターフェースに注目する。そのインターフェースだけを使って、部品を組み立て、製品にまとめる

役割

  • AbstractProduct: 抽象的な製品。Link, Tray, Pageクラス
  • AbstractFactory: 抽象的な工場。Factoryクラス
  • Client: Main.php
  • ConcreteProduct: 具体的な製品。ListLink, ListTray, ListPage, TableLink, TableTray, TablePageクラス
  • ConcreteFactory: 具体的な工場。ListFactoryクラス, TableFactoryクラス

まとめ

  • 具体的な工場を新たに追加するのは簡単に行える。サンプルコードに工場を追加する場合、Factory, Link, Tray, Pageのサブクラスを作成し、それぞれの抽象メソッドを実装すれば良い。具体的な工場はいくらでも追加できる。

  • 上記と反対に、部品を新たに追加するのは難しい。抽象的な工場Factoryクラスへ、新しいメソッド(新しい抽象的な部品)を定義した場合、既存の全ての工場へ修正が必要となる。これは大変な作業となる。

関連パターン

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門