Facade

パターンの目的

p.196,line.3-5: サブシステム内に存在する複数のインターフェイスに1つの統一インターフェイスを与える。Facadeパターンはサブシステムの利用を容易にするための高レベルインターフェイスを定義する。

GoF パターンのクラス図

structure-08-05:facade

MixJuice 版 Facade (改善)

解決される GoF パターンの問題点

情報隠蔽の問題点

p.201,line.4-8 サブシステム内にあるクラスを非公開にすることは有用であろうが、そのような機構をサポートしているオブジェクト指向言語はほとんどない。C++と Smalltalkは、従来からクラスに対してグローバルなネームスペースを採用してきた。しかし最近C++標準化委員会は、この言語に、サブクラス内の公開クラスだけをサブシステム外部に見せることを可能にする新たなネームスペースを追加した。

対策

名前空間分離を用いれば良い。

結果

サブクラス内の公開クラスだけをサブシステム外部に見せることが可能になる。

構造

xxx

MixJuice 版 Facade (別解)

解決される GoF パターンの問題点

クラス数増加の問題点
Java のような言語では、既存のクラスは変更できないため、 Facade パターンにより新しくインターフェイスを導入するためには新しくクラスを作らなければならない。これはクラス数の増加を招く。

対策

MixJuice では既存のクラスにメソッドを追加でき、これにより、クラス数を増加させずに高レベルインターフェイスを導入できる。

結果

構造

structure-08-09:facade

module library {
  define class A {...}
  define class B {...}
  define class C {...}
}

module facade extends library {
  class A {
    define static void simpleMethod(...) {...}
  }
}

サンプルコード

関連するパターン


MixJuice によるデザインパターン改善カタログ


田中 哲 <akr@m17n.org>, 一杉 裕志 <y-ichisugi@aist.go.jp>