【オブジェクト指向のこころ】6章 Facadeパターン

デザインパターンとともに学ぶオブジェクト指向のこころ」の学習記録。
「第6章 Facadeパターン」のまとめ。


Facadeパターンは、既存システムのフロントエンドとして新たなインタフェース(見せかけ=facade)を作成する。

単語の意味

  1. (建物の)正面
  2. 見かけ、外見

Facadeパターンの目的

GoFによるとFacadeパターンの目的は以下の通り。

  • サブシステム内に存在している複数のインタフェース群に対する、統一したインタフェースを提供する。
  • Facadeは高レベルのインタフェースを定義することにより、サブシステムを容易に使えるようにするものである。

適用例

Databaseをオープン、Modelを取得、Elementに対して情報を照会するシステムがある場合、Facadeが無ければ各々のClientがシステムの詳細を知る必要がある。
Facadeがあればその知識をFacadeに隠蔽できる。

このときポイントは、Facadeがステートレス(内部に情報を保持しない)になっていることである。

適用前

http://www.plantuml.com/plantuml/png/LSr13e9038NX_PnYBi0L3A8kFKHXNfJOZeIM1J7UNUAWcMw_z7zjrMYsHJZSnuG8cMoD0kanQmW3aseyyOXin_WARqzTeOc61zqGTLM3R5PkpcJKawBkhiy4hk7246JxqeQ_Lqrp-FSrbW4d-y9kdKiTrcddqj0YfqNu0m00

適用後

http://www.plantuml.com/plantuml/png/RP1B2iCm34JtEeKla2kKzDFkUWZ57jfGAmsHkWYbTw_169nWq4PlXj6WNeqN-qYavnZW8BEjJY035YNoaLNTEOwOxEY-zDkYKqOp-nS_u7HLWoIMFHSs7bXnOyy1jADrsZL2KboDxk-0c46Qqg3h3llOqgGXRTVQqTBooOPGwX7rc49wrHy0

有効なケース

Facadeが有効となるのは以下のような場合。

  • システムの利用状況を追跡する:
    システムに対する全てのアクセスをFacade経由にすることで、システムの利用状況を簡単に監視できるようになる。
  • システムを交換する:
    将来的にシステムを交換する場合、それなりに修正は必要になるが少なくとも影響範囲は1か所(Facadeクラス)に絞り込める。
    Facadeを適用しない場合はClientの数だけ影響範囲が広がる。

まとめ

以下の場合はFacadeの適用を検討する。

  • 複雑な既存システムがあり、その全機能を使用する必要がなく、かつ、そのシステムの利用規則を全て取り込んだ新規クラスを作成できる場合。
  • 既存システムをカプセル化、隠蔽したい場合。
  • 既存システムの機能を利用しながら、同時に新機能を追加したい場合。
  • 新規クラス(Facade)を開発するコストが、既存システムの使用方法を全員で学習するコストよりも安くつくか、将来の保守コストも安くつく場合。
    ※既存システムが単純で使用方法が簡単であれば、Facadeを作る方が高くつく可能性がある。