かまずにまるのみ。

文鳥とかビールとか

デザインパターン - Facade

オブジェクト指向のこころ のつづき。
GoFデザインパターンにある Facade パターンについて。


Facade?

Facade(ふぁさーど)を辞書で調べると以下のように書かれている。

1. (建物の)正面.
2. (しばしば実体よりりっぱな事物の)見かけ,外見.

http://ejje.weblio.jp/content/facade

 

ざっくり

既存システムを簡単に利用するための窓口を提供する。
窓口はシンプルな独自のインタフェースとなる。
デザインパターンを知らない人でもたぶん普通に使っているはず。

f:id:tdakak:20130619203424p:plain:w350


イメージ

窓口の存在

何でも預かる窓口があったとする。
ユーザ(お客さん)は窓口の人と以下のようなやりとりができる。

  • 何かを預ける
  • 預けたものを返してもらう

f:id:tdakak:20130619131026p:plain:w300

何かを預けたいときは窓口の人に渡せばよい。
預けたものを返してほしいときも、窓口の人にその旨伝えるだけ。
f:id:tdakak:20130619131033p:plain:w300

窓口の裏側

何でも預かる窓口の裏は結構複雑で、たくさんの倉庫や配送の仕組みがある。
しかしそれらは窓口に隠されていてユーザからは見えない。
窓口がユーザに提供するのは「何かを預かる」「預かったものを返す」だけ。
ユーザは窓口の後ろがどのようになっているか知る必要はない。
f:id:tdakak:20130619185149p:plain:w300

窓口の存在によって何が起こるのか

  • ユーザはシンプルな方法で荷物を預けることができるようになる
  • 「何かを預けるときは窓口を通す」という方針(制約)の規定
  • 窓口の裏側の仕組み(たとえば配送業者とか)が変わった場合、ユーザへの影響を最小限に抑えることが期待できる
  • ユーザは窓口が提供するサービス以外利用できない
    • もしかしたらたまに配送を使いたいときがあるかもしれない
    • その場合はまた別の方針が必要になるかもね

 

まとめ

  • 既存システム内のよく使う処理を簡潔なインタフェースで提供するのが Facade
  • Facade クラスは既存システムを利用するための方針(制約)を明示する
  • Facade クラスにより既存システムの使用方法が簡素化される
  • Facade クラスによって使用できる機能が制限される
  • Facade は既存クラスの隠蔽(カプセル化)のために使用することもできる