PHP7でデザインパターン入門15/23 Facadeパターン

Facade パターンとは

Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。

Facade パターン - Wikipedia

プログラムというのは段々大きくなる傾向がある。たくさんのクラスが作られ、相互に関係し、複雑さを増していく。 大きなプログラムを使って処理を行うためには、そのたくさんのクラスを適切に制御しなければならない。 その処理を行うための「窓口」を用意しておく。そうすればたくさんのクラスを個別に制御しなくても、その窓口に対して要求を出すだけで仕事が済む。

example

ユーザのWebページを作成するサンプルコードを作る。 Facadeパターンのサンプルを作るためには、本来「複雑に入り組んだたくさんのクラス」が必要にある。しかし、ここでは簡単のため3つのクラスだけからなるシステムを考える。

Databaseクラス

メールアドレスから名前を得る。

HtmlWriter

HTMLファイルを作成する。

PageMaker

Facade役として高レベルのインターフェースを提供する。

以下サンプルコード。

github.com

実行結果

$ 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役は、インターフェースを単純にすることで複雑なものを単純に見せている。そうすることで複雑なシステムに対するシンプルな窓口となる。

関連パターン

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

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