、外観モデルの定義
アピアランス(外観)モードを定義:モードファサードが既知は、スルーである複数の複雑なサブシステムに一貫したインタフェースを提供する、パターンがより容易にアクセスするサブシステム。モデルは内部サブシステムの具体的な詳細を気にしない外部、外部アプリケーションに統一されたインタフェースを持って、それが大幅に、アプリケーションの複雑さを軽減プログラムの保守性を改善するだろう。
第二に、モデルの外観の長所と短所
利点:
- 綿密なサブシステムを知らなくても、呼び出し元のプロセスを簡素化し、リスクを防ぎます
- リダクションシステムは疎結合、依存しています
- より良いアクセス分割レベル
- デメテルの法則、少なくともノウハウのつまり原則に沿って、
短所:
- リスク行動を導入し、サブシステム、簡単に拡張サブシステムを増やします
- 開閉の原則に準拠していません。
第三に、外観モードを達成するために
構造(外観)モデルの外観は、比較的簡単で高レベルのインタフェースの定義です。それは、様々なサブシステムへの参照が含まれている、クライアントは、様々なサブシステムを介してアクセスすることができます。今基本的な構造と実装を分析します。
外観(ファサード)モデルは、以下の主要な役割で構成されています。
- 外観(ファサード)役割:外部インターフェイスサブシステムの公倍数を提供します。
- サブシステム(サブシステム)役割:顧客は、文字の外観を介してアクセスすることができ、システムの機能の一部を実現します。
- 顧客(クライアント)の役割:役割の外観のさまざまなサブシステムによるアクセス。
図に示される構造:
コードは、外観モデルは、次のコードに属し、両方のケースで共通しています。
統一されたインタフェースを達成するために、すべてのサブシステム:
パブリック インターフェースシステム{ 公共 ボイドのdoSomething(); } パブリック クラス SubSystemA 実装システム{ 公共 ボイドのdoSomething(){ System.out.printlnは(「サブシステムメソッドA」); } } パブリック クラス SubSystemB 実装システム{ 公共 ボイドのdoSomething() { のSystem.out.println(「サブ方式B」); } } パブリック クラスファサード{ // の委任対象 システムB; 公衆ファサード(){ = 新しいSubSystemA()。 B = 新しいSubSystemB()。 } // 提供给外部访问的方法 公共 ボイドmethodA(){ この.a.dosomething()。 } 公共 ボイドmethodB(){ この.b.dosomething()。 } } パブリック クラスクライアント{ 公共 静的 ボイドメイン(文字列[]引数){ ファサードファサード = 新しい外観()。 facade.methodA(); facade.methodB(); } }
ない統一されたインタフェースを達成するために、すべてのサブシステム:
パブリック クラスSubSystemA { 公共 ボイドdosomethingA(){ System.out.printlnは( "サブシステムメソッドA" ); } } パブリック クラスSubSystemB { 公共 ボイドdosomethingB(){ System.out.printlnは( "サブシステム方法B" )。 } } パブリック クラス外観{ // 委任オブジェクト SubSystemA; SubSystemB B; 公共ファサード(){ = 新しい新しいSubSystemA(); B = 新しい新しいSubSystemB(); } // 提供给外部访问的方法 公共 ボイドmethodA(){ この.a.dosomethingA()。 } 公共 ボイドmethodB(){ この.b.dosomethingB()。 } } パブリック クラスクライアント{ 公共 静的 ボイドメイン(文字列[]引数){ ファサードファサード = 新しい外観()。 facade.methodA(); facade.methodB(); } }
次のようにテスト結果は以下のとおりです。
サブシステムの方法
サブシステムB法
アプリケーションシーン四つの外観モード
一般的外観モデルを使用して、以下に考慮することができます。
- サブシステムは、より複雑な、モデルの外観を大きくすると、シンプルなインタフェースの呼び出しを提供します
- 多層システムアーキテクチャの構築、入口として各オブジェクトの外観を使用して、簡略化され、層間の呼び出し
拡張V.の外観モード
反して、外観ベースのサブシステム、修正する必要が追加または削除外観モードでは、「オン - オフの原則を。」抽象クラスの外観を導入した場合、それはある程度の問題を解決され、図1に示す構造図。:
コードは以下の通りであります:
パブリック クラスFacadeパターン { 公共 静的 ボイドメイン(文字列[]引数) { 外観F = 新しいFacadeImpl1()。 f.method(); F = 新しいFacadeImpl2()。 f.method(); } } インターフェース外観{ 公共 ボイド法(); } // 外观角色 クラス FacadeImpl1 実装Facede { プライベート SubSystem01 OBJ1 = 新しいSubSystem01()。 民間SubSystem02 obj2が= 新しいSubSystem02(); プライベート SubSystem03 OBJ3 = 新しいSubSystem03(); 公共 ボイド方法() { obj1.method1()。 obj2.method2(); obj3.method3(); } } // 外观角色 クラス FacadeImpl1 実装Facede { プライベート SubSystem02 OBJ2 = 新しいSubSystem02()。 プライベート SubSystem03 OBJ3 = 新しいSubSystem03(); プライベート SubSystem04 OBJ4 = 新しいSubSystem04(); 公衆 ボイド法() { obj2.method2(); obj3.method3(); obj4.method4(); } } // サブ文字 クラスSubSystem01 { 公共 ボイド法1() { System.out.printlnは(「サブシステム01法1()と呼ばれている! " ); } } // サブシステムの役割 クラスSubSystem02 { 公共 のボイド法2() { System.out.printlnは( "サブ02方法2は()と呼ばれている"!); } } // サブシステムロールの クラスSubSystem03 { 公共 のボイド法3() { System.out.printlnは( "サブ03法3は、()と呼ばれて!" ); } } // サブシステムの役割の クラスSubSystem04 { 公共 のボイド法4() { System.out.printlnは( "04法4サブシステム()と呼ばれています!" ); } }