Facade パターン

Facade パターンあるいは Façade パターン（ファサード・パターン）とは、GoF（Gang of Four; 4人のギャングたち）によって定義された、コンピュータソフトウェアのデザインパターンの1つである。Facade（ファサード）とは「建物の正面」を意味する。異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的とする。
概要.
Facadeパターンの例として、サブシステムとしてのコンパイラーを考える。システムとしてのコンパイラーは字句解析器や構文解析器などから構成されている。これらの構成要素は、新たなコンパイラーやその他ソフトウェアを作成する上でサブシステムとして利用することが出来る。しかし、一般ユーザーにとってコンパイラーはソースコードからプログラムを生成するためのものであり、ソースコードをコンパイルできる機能があれば十分である。そこでサブシステムから一般ユーザーのために一般ユーザーが必要としているコンパイル機能だけを呼び出すクラスを提供する。ここで提供されたコンパイル機能を持つクラスがFacadeクラスである。Facadeクラスが提供された事により一般ユーザーはサブシステムの詳細を知る必要がなくなり、サブシステムの実装から解放されるのである。
クラス図.
Facade パターンのクラス図を以下に挙げる。
適用例.
Java による適用例を以下に挙げる。
codice_1
 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;
codice_2
 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);
codice_3
 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.");
codice_4
 import driving.DrivingSimulator;
 public class FacadeTest{
 public static void main(String[] argv){
 new DrivingSimulator().simulate();
このソースコードの場合、クラス図の codice_5 にあたるのは 
codice_6 である。
codice_7 や codice_8 の各種メソッドの呼び出しが 
codice_9 の中にすべて集約されている。