外観デザインパターンモード(外観)とコード例は、詳細

、外観モデルの定義

  アピアランス(外観)モードを定義:モードファサードが既知は、スルーである複数の複雑なサブシステムに一貫したインタフェースを提供する、パターンがより容易にアクセスするサブシステム。モデルは内部サブシステムの具体的な詳細を気にしない外部、外部アプリケーションに統一されたインタフェースを持って、それが大幅に、アプリケーションの複雑さを軽減プログラムの保守性を改善するだろう。

第二に、モデルの外観の長所と短所

  利点:

  • 綿密なサブシステムを知らなくても、呼び出し元のプロセスを簡素化し、リスクを防ぎます
  • リダクションシステムは疎結合、依存しています
  • より良いアクセス分割レベル
  • デメテルの法則、少なくともノウハウのつまり原則に沿って、

  短所:

  • リスク行動を導入し、サブシステム、簡単に拡張サブシステムを増やします
  • 開閉の原則に準拠していません。

第三に、外観モードを達成するために

  構造(外観)モデルの外観は、比較的簡単で高レベルのインタフェースの定義です。それは、様々なサブシステムへの参照が含まれている、クライアントは、様々なサブシステムを介してアクセスすることができます。今基本的な構造と実装を分析します。

  外観(ファサード)モデルは、以下の主要な役割で構成されています。

  • 外観(ファサード)役割:外部インターフェイスサブシステムの公倍数を提供します。
  • サブシステム(サブシステム)役割:顧客は、文字の外観を介してアクセスすることができ、システムの機能の一部を実現します。
  • 顧客(クライアント)の役割:役割の外観のさまざまなサブシステムによるアクセス。

  図に示される構造:

              

  コードは、外観モデルは、次のコードに属し、両方のケースで共通しています。

  統一されたインタフェースを達成するために、すべてのサブシステム:

パブリック インターフェースシステム{
     公共 ボイドの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サブシステム()と呼ばれています!" ); 
    }    
}

おすすめ

転載: www.cnblogs.com/jing99/p/12602696.html
おすすめ