Facadeパターン
ファサードデザインパターンモデルは、構造モデルに属し、サブシステムとの外部通信は、ファサードを介して統一する必要があり、ファサード・パターンは、サブシステムのことを使いやすい高レベルのインタフェースを提供します。
ファサードパターンの適用
-
あなたは、複雑なサブシステム時刻にシンプルなインターフェイスを提供したいときFacadeパターンが適用されます。特別に適用されるに十分なほとんどのユーザーのためになることが多いため、一定の進化のサブシステムとファサードパターンを使用するユーザーのために、より複雑かつ困難になるが、シンプルなコール・インタフェース・サブシステムコールを提供することができますユーザーの需要が直下のサブシステムにアクセスするファサードオブジェクト間で直接です。
-
大きな依存性があり、両方のサブシステムが、大幅ファサードのモード結合とを向上させることができるクライアント・サブシステム、およびサブシステムの独立性を用いることによって低減することができるように、ファサード・モードでは、クライアントへの直接コールするのに適しています移植。
-
あなたは階層システムを構築する必要があるときは、これらのサブシステムは、それらが相互に通信できるようにインターフェイスを定義し相互に依存している場合、各サブシステムのためのインタフェースを定義するためにファサードパターンを使用することができます。
図のファサード構造モデル。
フィギュア、ロールモデルファサードの2種類のみの合計で示されているように:
役割のファサード(建物の正面):クライアントインターフェイスファサードの役割を呼び出すことによっては、主にサブシステムへのクライアントの要求に委任すべての機能のサブシステム、そのファサードの役割と責任をサブシステムへのアクセスを提供します。
役割サブシステム(サブシステム)のサブセクションの役割は、特定の機能、役割の実際の実装であり、ファサード委任されたタスクを処理します。
例のファサードパターン
まず、我々はサブモジュールA、B、C三つのモジュールを宣言し、各モジュールは、それぞれの機能を実行します。
モジュールA:
パブリック クラスModuleA { 公共 ボイド動作(){ System.out.printlnは(「モジュールの機能動作」); } }
モジュールB:
パブリック クラスModuleB { 公共 ボイド動作(){ System.out.printlnは( "操作機能モジュールB" ); } }
モジュールC:
パブリック クラスModuleC { 公共 ボイド動作(){ System.out.printlnは( "操作機能モジュールC" ); } }
以下は、ファサードオブジェクトが確立方法に従ってサブモジュールABC 3つのそれぞれの機能にアクセスすることができ定義します。
パブリック クラスファサード{ 公共 ボイド動作(){ ModuleA moduleA = 新しいModuleA()。 ModuleB moduleB = 新しいModuleB(); ModuleC moduleC = 新しいModuleC(); moduleA.Operation(); moduleB.Operation(); moduleC.Operation(); } }
オブジェクトが提供するファサード・インターフェースを呼び出すために、クライアントを定義します。
パブリック クラスクライアント{ 公共 静的 ボイドメイン(文字列[]引数){ ファサードファサード = 新しい外観()。 facade.Operation(); } }
结果如下。
モジュールの機能動作
ブロックBの機能動作
操作機能モジュールC
クライアントが個人的のサブシステムA、B、C 3、クライアントはモジュールAを知っている必要がないように、B、Cを呼び出す必要がないように、各モジュールを介してFacadeパターンは、機能サブシステムを起動します具体的な実装の詳細は、クライアントが十分なだけでオブジェクトのファサードファサードと対話する必要があります。
アドバンテージファサードパターン
以下の利点の合計のファサード:
1、顧客還元 - サブシステムとの間の結合の程度を。
ファサードパターンを用いることで、より簡単にクライアントを変更する必要がある場合は何のために心配することなく、サブシステムの様々な小さなモジュールを拡張することができます。
2、その結果、ファサード・サブシステムに簡単かつシンプルなパターン
ファサードパターンを使用することにより、クライアントは、インターフェースがシンプルで、十分な対話型の提供の役割の唯一のファサードを必要とどのように複雑なサブシステムを心配する必要はありません。
図3に示すように、アクセスのレベルをより良く分割
そのクライアントの使用を容易にするだけでなく、良いだけでなく、プライベートなビーズは内部のサブシステム機能を拡張することができながら、サブシステムは、共通のインターフェースおよび使用するクライアントの役割のファサードの一部のプライベート・インタフェース、共通のインタフェースを提供することができ、ファサードパターンを使用しますこれは、サブシステムの実装の詳細を隠します。