Abstract Factory パターンとは
関連するインスタンス群を生成するための API を集約することによって、複数のモジュール群の再利用を効率化することを目的とする。
Abstract Factory パターン - Wikipedia
example
サンプルプログラムは階層構造を持ったリンク集をHTMLファイルとして作る、というもの。 ファイル数が多いため、github上にアップした。
今までのデザインパターンと比較して、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クラスへ、新しいメソッド(新しい抽象的な部品)を定義した場合、既存の全ての工場へ修正が必要となる。これは大変な作業となる。
関連パターン
- PHP7でデザインパターン入門7/23 Builderパターン - Do Something
- PHP7でデザインパターン入門8/23 Abstract Factoryパターン - Do Something
- PHP7でデザインパターン入門11/23 Compositeパターン - Do Something
- PHP7でデザインパターン入門5/23 Singletonパターン - Do Something
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (399件) を見る