コンテンツにスキップ
Wikipedia

Facade パターン

出典: フリー百科事典『ウィキペディア(Wikipedia)』

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

packagedriving;
class Car{
privateintspeed;
privateintdistance;
Car(){
this.speed=0;
this.distance=0;
}
voidsetSpeed(intspeed){
this.speed=speed;
}
voidrun(intminutes){
this.distance+=minutes*this.speed;
}
intgetDistance(){
returnthis.distance;
}
}

driving.Driver

packagedriving;
class Driver{
privateCarcar;
Driver(Carcar){
this.car=car;
}
voidpushPedal(intspeed){
this.car.setSpeed(speed);
}
voiddrive(intminutes){
this.car.run(minutes);
}
}

driving.DrivingSimulator

packagedriving;
publicclass DrivingSimulator{
publicvoidsimulate(){
Carc=newCar();
Driverd=newDriver(c);
d.pushPedal(700);
d.drive(30);
d.pushPedal(750);
d.drive(20);
System.out.println("The travel distance is "+c.getDistance()+" m.");
}
}

FacadeTest

importdriving.DrivingSimulator;
publicclass FacadeTest{
publicstaticvoidmain(String[]argv){
newDrivingSimulator().simulate();
}
}

このソースコードの場合、クラス図の Facade にあたるのは DrivingSimulator である。 CarDriver の各種メソッドの呼び出しが DrivingSimulator#simulate() の中にすべて集約されている。

関係するパターン

[編集 ]
Abstract Factory パターン
Abstract Factory パターンは Facade パターンの具体例と言える。ConcreteFactory クラスが Facade クラスに相当する。

関連項目

[編集 ]
GoFによる23種のパターン
生成に関するパターン
構造に関するパターン
振る舞いに関するパターン
並行性に関するパターン
アーキテクチャに関するパターン
その他のパターン
関連する人々
関連項目

AltStyle によって変換されたページ (->オリジナル) /