Index
Facadeパターンとは、複雑に絡み合ってごちゃごちゃした詳細をまとめ、高レベルのインターフェースを提供します。
Facade役は、システムの外部に対してはシンプルなインターフェースを見せます。またFacade役はシステムの内側にある各システムの役割や依存関係を考えて、正しい順番でクラスを利用します。
- インターフェースを少なくできる
- 呼び出しの順番を気にしなくて良くなる
資料作成を依頼し、資料のチェックまで誰かにお願いするサンプルコードを見ていきましょう。
サンプルコードでは、簡略化のため全ての関数の処理をprintlnのみで構成しています。
クラス図はこんな感じになります。
ドキュメントを作成し、上司へ提出するクラスです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package documentMaker; public class DocumentCreater { final String m_name; DocumentCreater(String name) { m_name = name; } public void create() { System.out.println(m_name + "が資料を作成しました"); } public void submit() { System.out.println(m_name + "が資料を提出しました"); } } |
提出されたドキュメントを確認するクラスです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package documentMaker; public class DocumentChecker { private final String m_name ; DocumentChecker(String name){ m_name = name; } public void check() { System.out.println(m_name + "が資料を確認しました"); } } |
DocumentMaker,DocumentCheckerクラスを使って、資料作成〜チェックまでを支持するクラスです。
Facadeパターンで一番重要なクラスになります。
ポイントは以下の2点
- 外部(Mainクラス)に対しては、createDocumentメソッドだけを見せているとてもシンプルな窓口です。(メリット①)
- 書くメソッドの使用順は,createDocumentメソッドに隠蔽されている(メリット②)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package documentMaker; public class DocumentMaker { private DocumentMaker() { } public static void createDocument() { final DocumentCreater creater = new DocumentCreater("tanaka"); creater.create(); creater.submit(); final DocumentChecker checker = new DocumentChecker("sasaki"); checker.check(); } } |
1 2 3 4 5 6 7 8 9 |
import documentMaker.DocumentMaker; public class Main { public static void main(String[] args) { DocumentMaker.createDocument(); } } |
1 2 3 |
tanakaが資料を作成しました tanakaが資料を提出しました sasakiが資料を確認しました |