Facade_パターン
[Wikipedia|▼Menu]

Facade パターンあるいは Facade パターン(ファサード・パターン)とは、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 クラスに相当する。
関連項目

デザインパターン

パッケージ (Java)










デザインパターン
GoFによる23種のパターン

生成に関するパターン

Abstract factory

Builder

Factory method

Prototype

Singleton

構造に関するパターン

Adapter

Bridge

Composite

Decorator

Facade

Flyweight

Proxy

振る舞いに関するパターン

Chain of responsibility

Command

Interpreter

Iterator

Mediator

Memento

Observer

State

Strategy

Template method

Visitor


並行性に関するパターン

Active object(英語版)

Balking(英語版)

Double-checked locking(英語版)

Event-based asynchronous(英語版)

Guarded suspension(英語版)

Join(英語版)

ロック

モニタ

Proactor(英語版)

Reactor

Readers?writer lock(英語版)

Scheduler(英語版)

Thread pool(英語版)

スレッド局所記憶

アーキテクチャに関するパターン

Front Controller(英語版)

Interceptor(英語版)

MVC

MVVM

多層アーキテクチャ

Specification(英語版)

出版-購読型モデル

Naked objects(英語版)

Service Locator(英語版)

Active Record

Identity map(英語版)

Data Access Object

Data Transfer Object

その他のパターン

依存性の注入 (DI)

遅延読み込み

モックオブジェクト

Null object(英語版)

Object pool(英語版)

Servant(英語版)

Type tunnel(英語版)

関連する人々

ギャング・オブ・フォー

エーリヒ・ガンマ

リチャード・ヘルム

ラルフ・ジョンソン

ジョン・ブリシディース


クリストファー・アレグザンダー

グラディ・ブーチ

ケント・ベック

ウォード・カニンガム

マーティン・ファウラー

ロバート・セシル・マーティン(英語版)

ジム・コプリエン(英語版)

ダグラス・C. シュミット(英語版)

リンダ・ライジング(英語版)

関連項目

アナリシスパターン

アンチパターン



一覧

カテゴリ

コモンズ


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:12 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef