Facade patternとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 百科事典 > Facade patternの意味・解説 

Facade パターン

(Facade pattern から転送)

出典: フリー百科事典『ウィキペディア(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 である。 CarDriver の各種メソッドの呼び出しが DrivingSimulator#simulate() の中にすべて集約されている。

関係するパターン

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

関連項目




英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「Facade pattern」の関連用語

Facade patternのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



Facade patternのページの著作権

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのFacade パターン (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2026 GRAS Group, Inc.RSS