デザインパターン - Facade
オブジェクト指向のこころ のつづき。
GoF のデザインパターンにある Facade パターンについて。
Facade?
Facade(ふぁさーど)を辞書で調べると以下のように書かれている。
1. (建物の)正面.
http://ejje.weblio.jp/content/facade
2. (しばしば実体よりりっぱな事物の)見かけ,外見.
イメージ
窓口の存在
何でも預かる窓口があったとする。
ユーザ(お客さん)は窓口の人と以下のようなやりとりができる。
- 何かを預ける
- 預けたものを返してもらう
何かを預けたいときは窓口の人に渡せばよい。
預けたものを返してほしいときも、窓口の人にその旨伝えるだけ。
窓口の裏側
何でも預かる窓口の裏は結構複雑で、たくさんの倉庫や配送の仕組みがある。
しかしそれらは窓口に隠されていてユーザからは見えない。
窓口がユーザに提供するのは「何かを預かる」「預かったものを返す」だけ。
ユーザは窓口の後ろがどのようになっているか知る必要はない。
窓口の存在によって何が起こるのか
- ユーザはシンプルな方法で荷物を預けることができるようになる
- 「何かを預けるときは窓口を通す」という方針(制約)の規定
- 窓口の裏側の仕組み(たとえば配送業者とか)が変わった場合、ユーザへの影響を最小限に抑えることが期待できる
- ユーザは窓口が提供するサービス以外利用できない
- もしかしたらたまに配送を使いたいときがあるかもしれない
- その場合はまた別の方針が必要になるかもね
まとめ
- 既存システム内のよく使う処理を簡潔なインタフェースで提供するのが Facade
- Facade クラスは既存システムを利用するための方針(制約)を明示する
- Facade クラスにより既存システムの使用方法が簡素化される
- Facade クラスによって使用できる機能が制限される
- Facade は既存クラスの隠蔽(カプセル化)のために使用することもできる