Facade パターン
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2014/02/19 15:53 UTC 版)
Facade パターンあるいは Façade パターン(ファサード・パターン)とは、GoF(Gang of Four; 4人のギャングたち)によって定義された、コンピュータソフトウェアのデザインパターンの1つである。Facade(ファサード)とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。
概要
Facadeパターンの例として、サブシステムとしてのコンパイラーを考える。システムとしてのコンパイラーは字句解析器や構文解析器などから構成されている。これらの構成要素は、新たなコンパイラーやその他ソフトウェアを作成する上でサブシステムとして利用することが出来る。しかし、一般ユーザーにとってコンパイラーはソースコードからプログラムを生成するためのものであり、ソースコードをコンパイルできる機能があれば十分である。そこでサブシステムから一般ユーザーのために一般ユーザーが必要としているコンパイル機能だけを呼び出すクラスを提供する。ここで提供されたコンパイル機能を持つクラスがFacadeクラスである。Facadeクラスが提供された事により一般ユーザーはサブシステムの詳細を知る必要がなくなり、サブシステムの実装から解放されるのである。
Facadeパターンの要件
- Facadeクラスはあくまでサブシステム内部に仕事を投げるだけで複雑な実装は持たない。
- 多様な機能の塊であるサブシステムから、サブシステムを利用するユーザーの用途に合わせた窓口(インターフェース)を提供するだけである。
- Facadeクラスをサブシステム自体が利用する事はない。
- Facadeクラスはあくまでサブシステム末端の窓口であるため、同じサブシステムから利用される事はない。
- Facadeパターンはサブシステムの直接使用を妨げない。
- Facadeクラスの利用は強制ではなく、必要であればサブシステムの機能を直接利用できる。言語によっては無名名前空間やPackageスコープによりサブシステムを利用者から隔離できるが、Facadeパターンはそのような制限はしない。
クラス図
Facade パターンのクラス図を以下に挙げる。
適用例
Java による適用例を以下に挙げる。
driving.Car
package driving; class Car{ private int speed; private int distance; Car(){ this.speed = 0; this.distance = 0; } void setSpeed(int speed){ this.speed = speed; } void run(int minutes){ this.distance += minutes * this.speed; } int getDistance(){ return this.distance; } }
driving.Driver
package driving; class Driver{ private Car car; Driver(Car car){ this.car = car; } void pushPedal(int speed){ this.car.setSpeed(speed); } void drive(int minutes){ this.car.run(minutes); } }
driving.DrivingSimulator
package driving; public class DrivingSimulator{ public void simulate(){ Car c = new Car(); Driver d = new Driver(c); d.pushPedal(700); d.drive(30); d.pushPedal(750); d.drive(20); System.out.println("The travel distance is " + c.getDistance() + " m."); } }
FacadeTest
import driving.DrivingSimulator; public class FacadeTest{ public static void main(String[] argv){ new DrivingSimulator().simulate(); } }
このソースコードの場合、クラス図の Facade
にあたるのは DrivingSimulator
である。 Car
や Driver
の各種メソッドの呼び出しが DrivingSimulator#simulate()
の中にすべて集約されている。
関係するパターン
- Abstract Factory パターン
-
Abstract Factory パターンは Facade パターンの具体例と言える。
ConcreteFactory
クラスがFacade
クラスに相当する。
関連項目
|
「Facade パターン」の例文・使い方・用例・文例
- そのような行動のパターンが多い
- 君の服装はいつもワンパターンだな。
- 周りの文化の行動パターンを取り入れることの重要さを彼は強調した。
- 母馬は通常毎年同じ分娩パターンを繰り返す。
- ウェザーマーチャンダイジングは、消費者の行動パターンを分析するために、天候に焦点をあてる。
- エリアマーケティングは消費者の行動パターンを探る上で地域を重要視する。
- チャートの二番底のパターン
- 下記のパターンに従って
- 私は彼の行動パターンを学んだ。
- そのノズルは7つのパターンで散水ができるようになっています。
- 同じパターンで用いても違いが生じる。
- 同じパターンを用いても違いが出来ます。
- このように、名詞の変化のパターンがある他に、動詞の語形変化も現代英語よりもいろいろな種類がありました。
- 離れることで全体が見渡せるようになり、今度はそれで、ある程度のパターン認識ができるようになるのである。
- 南諸島のコミュニティの中にはまったくの正反対の血縁関係のパターンが観察されるであろう。
- 世界貿易の変動パターンが次の表で明らかにされている。
- 居酒屋で飲んで、カラオケか。俺達もワンパターンだな。
- この母音変化はそれぞれの単語に指定される全体のアクセントパターンと大いに関係している。
- この氷結と氷解のパターンが、北極熊の主な獲物であるアザラシの分布と数に影響を与えるのだ。
- 彼とデートしたっていつもワンパターンなんだからあきちゃうのよ.
- Facade_パターンのページへのリンク