Facade パターンとは
Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。
プログラムというのは段々大きくなる傾向がある。たくさんのクラスが作られ、相互に関係し、複雑さを増していく。 大きなプログラムを使って処理を行うためには、そのたくさんのクラスを適切に制御しなければならない。 その処理を行うための「窓口」を用意しておく。そうすればたくさんのクラスを個別に制御しなくても、その窓口に対して要求を出すだけで仕事が済む。
example
ユーザのWebページを作成するサンプルコードを作る。 Facadeパターンのサンプルを作るためには、本来「複雑に入り組んだたくさんのクラス」が必要にある。しかし、ここでは簡単のため3つのクラスだけからなるシステムを考える。
Databaseクラス
メールアドレスから名前を得る。
HtmlWriter
HTMLファイルを作成する。
PageMaker
Facade役として高レベルのインターフェースを提供する。
以下サンプルコード。
実行結果
$ php Main.php Welcome.html is created for example01@example.com (eample01) $ cat Welcome.html <html> <head> <title>Welcome to the eample01's page!</title> </head> <body> <h1>Welcome to the eample01's page!</h1> <p>Welcome to the eample01's page!</p> <p>I'm looking forward to hearing from you.</p> <p><a href="mailto:example01@example.com">eample01</a></p> </body> </html>
役割
Facade役
システムを構成しているその他大勢の役の「シンプルな窓口」となる。高レベルでシンプルなインターフェースをシステム外部に提供する。 サンプルコードにおけるPageMakerクラス。
システムを構成してるその他大勢の役
その他大勢の役は、それぞれの仕事を行うが、Facade役のことは意識しない。Facade役から呼び出されるが、この役からFacade役を呼び出すことはない。サンプルコードにおけるDatabase, HtmlWriterクラス。
Client役
Facadeを利用する役。 サンプルコードにおけるMain。
まとめ
再帰的なFacadeパターン
Facade役を持ったクラスの集合が複数あるとする。そのとき、それらの集合をさらにまとめたFacade役を作ることもできる。
Facade役のやっていること
Facade役は、インターフェースを単純にすることで複雑なものを単純に見せている。そうすることで複雑なシステムに対するシンプルな窓口となる。
関連パターン
- PHP7でデザインパターン入門8/23 Abstract Factoryパターン - Do Something
- PHP7でデザインパターン入門5/23 Singletonパターン - Do Something
- PHP7でデザインパターン入門16/23 Mediatorパターン - Do Something
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (399件) を見る