【デザインパターン】Facadeパターン|複雑なシステムをシンプルにする

複雑なシステムを組み込むときにシンプルにする方法
複雑なことをシンプルにする方法として「ファサードパターン」があります。
これはデザインパターンの1つです。
このデザインパターンを使うメリットは、疎結合になることです。
「ファサードパターン」を適用することで、コードがシンプルになります。
不具合改修、機能拡張が容易になります。
Facadeパターンは、複雑にからみ合ってごちゃごちゃした詳細をまとめ、高レベルのインタフェース(API)を提供します。Facade役は、システムの外側に対してはシンプルなインタフェース(API)を見せます。また、Facade役はシステムの内側にある各クラスの役割や依存関係を考えて、正しい順番でクラスを利用します。
Java言語で学ぶデザインパターン入門
以降でFacadeパターンを適用前と適用後のクラス間の関係を示します。
もくじ
Facadeパターン適用前

クライアントに「サブシステム」を組み込んで利用するときに、Facadeパターンを適用しない場合
クライアント内に複数の画面があります。
各画面はサブシステム内にある各クラスにアクセスしています。
つまり、クラスの生成手順や使い方を意識して実装する必要があります。
例)サブシステムを使って「日報を送信する」場合の処理手順を以下に示します。
- パソコンの電源ON
- モニタの電源ON
- マウスの電源ON
- パソコンの起動待つ
- メールアプリ起動
- メール新規作成
- メール宛先入力
- キーボード業務開始入力
- マウスでメール送信ボタンを選択
この手順がサブシステムを使うときに必要な知識となります。
※これを知るには内部の各クラスの仕様を理解する必要があります。
「クライアント(サブシステム利用者)」と「サブシステム(サービスを提供するもの)」が密に結合していることが分かると思います。
Fcacadeパターン未適用によるデメリット
- クライアントがサブシステムの各々のクラスに依存している。
- クライアントがサブシステムの各クラスのことを知らないと使用できない。
- サブシステムの一部のクラスを変更するとクライアントに影響がでる。
これにFacadeパターンを適用させます。
Facadeパターンを適用後

「クライアント」と「サブシステム」の橋渡し役としてFacadeクラスを導入する。
Facadeクラスは、サブシステムが外部に提供するI/Fとなる部分を公開する。
そうすることでもともとあった内部のクラスをカプセル化できます。
クライアントは、サブシステムの詳細なことを知らなくても利用できます。
Facadeクラスのメソッドを呼び出すだけで、利用できます。
Facadeクラスには、外部に提供する「日報を送信するメソッド」定義します。
そうすることで、クライアントはサブシステムの細かい仕様を知らなくても利用できます。
また、サブシステムのメール送信処理の仕様が変更された場合でも、クライアントは影響がなくなります。
Facadeクラスがその部分を吸収します。
Fcacadeパターン適用のメリット
- クライアントはサブシステムの詳細は知らなくても良い
- サブシステム内のクラスの変更影響を受けない
- Facadeクラスがその影響を吸収する
デザインパターン勉強に使用したもの
デザインパターンでおすすめの書籍と動画講座を紹介します。
おすすめ書籍
「独学デザインパターンC++」
「Java言語で学ぶデザインパターン入門」
おすすめ動画講座
デザインパターン1:デザインパターンを学ぶ準備とクラス図とファサードパターン
講師:ピーコックアンダーソン
この講座を受講することで簡単にFacadeパターンの適用方法や実践的な活用事例などを学ぶことができます。
講師の方の説明が丁寧で非常にわかりやすいです。
講座ではC#で説明しています。
講座内で作成しているコードもダウンロードできるようになっているので、すぐに自分で動作させながら確認もできます。
講座へここをクリック



