JAVA デザイン パターン 10: アピアランス モードにより、クライアントはシンプルなインターフェイスを通じてサブシステムと対話できます。

著者のホームページ:デザイナー Xiao Zheng
著者について: JAVA テクノロジー、システム カスタマイズ、リモート ガイダンスに重点を置いた 3 年間の JAVA フルスタック開発経験、エンタープライズ デジタル トランスフォーメーションに注力、CSDN ブログ エキスパート、Alibaba Cloud コミュニティ エキスパート ブロガー、Blue Bridge クラウドコースの講師。


ここに画像の説明を挿入します

1. アピアランスモードとは何ですか?

アピアランス パターンは、サブシステム内の一連のインターフェイスにアクセスするための統一インターフェイスを提供する構造設計パターンです。アピアランス パターンは、サブシステムの複雑さを隠し、クライアントが単純なインターフェイスを介してサブシステムと通信できるようにします。サブシステムの内部詳細。

アピアランス パターンでは、アピアランス クラスはクライアントとサブシステムの間の仲介者として機能し、一連のサブシステム インターフェイスをカプセル化し、クライアントが使用するシンプルで高レベルのインターフェイスを提供します。

出現モードは以下の通り2 22つの重要な役割。

  1. Facade : ファサード クラスはファサード パターンの中核であり、シンプルなインターフェイスを提供し、クライアントが便利に使用できるように一連の複雑なサブシステム インターフェイスをラップします。
  2. サブシステム: サブシステムには、特定の機能を実行するための一連の関連クラスとインターフェイスが含まれています。クライアントは、ファサード クラスを通じてサブシステムの機能に間接的にアクセスできます。

アピアランスモードの利点は以下のとおりです3 3カテゴリー3

  1. クライアントとサブシステム間の対話を簡素化することで、クライアントはサブシステムの特定の実装を知らなくても、外観クラスの統一インターフェイスを通じてサブシステムにアクセスできます。
  2. サブシステムの複雑さは隠蔽されており、クライアントはサブシステムの内部構造や詳細を理解する必要はなく、外観クラスによって提供されるインターフェイスを使用するだけで済みます。
  3. クライアントの結合度は減少し、クライアントはアピアランス クラスのみに依存し、サブシステムのインターフェイスに直接依存する必要がありません。

アピアランスモードの適用シナリオには以下が含まれます3 3カテゴリー3

  1. 複雑なサブシステムを単純化または分離する必要がある場合は、ファサード パターンの使用を検討してください。
  2. 複雑なサブシステムにアクセスするための単純なインターフェイスを提供する必要がある場合、ファサード パターンを使用してサブシステムのインターフェイスをカプセル化できます。
  3. 複数のサブシステムがあり、クライアントがサブシステムの 1 つとのみ対話する必要がある場合、外観パターンを使用して統一インターフェイスを提供できます。

外観パターンは、クライアントとサブシステム間の対話を簡素化し、シンプルなインターフェイスを提供し、サブシステムの複雑さを隠し、クライアントの結合を減らすことができる、一般的に使用される設計パターンです。

ここに画像の説明を挿入します


2. アピアランスモードの例

以下は、外観モードの実装を示す簡単な Java コードの例です。これをローカル実行にコピーしてください。

// 子系统A
class SubsystemA {
    
    
    public void operationA() {
    
    
        System.out.println("Subsystem A operation");
    }
}

// 子系统B
class SubsystemB {
    
    
    public void operationB() {
    
    
        System.out.println("Subsystem B operation");
    }
}

// 外观类
class Facade {
    
    
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    
    public Facade() {
    
    
        subsystemA = new SubsystemA();
        subsystemB = new SubsystemB();
    }
    
    public void operation() {
    
    
        subsystemA.operationA();
        subsystemB.operationB();
    }
}

// 客户端
public class Client {
    
    
    public static void main(String[] args) {
    
    
        Facade facade = new Facade();
        facade.operation();
    }
}

上の例では、SubsystemAと はSubsystemB2 つの特定のサブシステムであり、それぞれ独自の操作を実行します。

Facadeサブシステムのインターフェースをカプセル化し、簡単な操作メソッドを提供する外観クラスですoperation()

クライアントは、サブシステムと直接対話せずに、ファサード クラスのアクション メソッドを呼び出すことによってサブシステムを使用します。

クライアント コードを実行すると、出力は次のようになります。

Subsystem A operation
Subsystem B operation

アピアランス モードは、サブシステムの複雑さを隠しながら、複雑なサブシステム インターフェイスをカプセル化し、クライアントが使用するシンプルなインターフェイスを提供します。クライアントは、サブシステムの詳細を知らなくても、アピアランス クラスと対話するだけで済みます。実装の詳細。

ここに画像の説明を挿入します


3. 外観モードの適用シナリオ

外観パターンを使用すると、システムの複雑さを簡素化し、次の状況でクライアントがサブシステムにアクセスするためのシンプルなインターフェイスを提供できます5つのアプリケーションシナリオ。

  1. システムに複雑なサブシステムがあり、外部への単純なインターフェイスを提供する必要がある場合は、外観パターンを使用できます。出現パターンはサブシステムの複雑さをカプセル化し、クライアントにシンプルで統一されたインターフェイスを提供することで、クライアントとサブシステム間の結合を軽減します。
  2. 出現パターンは、クライアントとサブシステム間の関係を切り離す必要がある場合に使用できます。アピアランス モードはサブシステムをアピアランス クラスにカプセル化するため、クライアントはサブシステムのインターフェイスに直接依存せずにアピアランス クラスと対話するだけで済み、クライアントの結合度が低くなります。
  3. アピアランス モードは、複数のサブシステムを一元管理する必要がある場合に使用できます。アピアランス モードは、複数のサブシステムの機能を統合する統一インターフェイスを提供して、クライアントの管理と呼び出しを容易にすることができます。
  4. サブシステムを階層的にカプセル化する必要がある場合は、外観パターンを使用できます。アピアランス モードはサブシステムを複数のレベルに分割でき、各レベルはサブシステムの柔軟な管理を実現するために異なるインターフェイスを提供します。
  5. ファサード パターンは、新しいサブシステムをシステムに導入する必要がある場合に使用できます。アピアランスモードにより、クライアントに影響を与えることなく新しいサブシステムをカプセル化して統合することができ、システムの拡張やアップグレードを実現します。

この出現パターンは、複雑なシステムの簡素化、クライアントとサブシステムの分離、複数のサブシステムの均一な管理、サブシステムの階層的なカプセル化、新しいサブシステムの導入が必要なシナリオに適しており、システムの保守性、拡張性、および柔軟性を向上させることができます。システム、性別。

ここに画像の説明を挿入します


4. アピアランスモードのインタビューの質問

  1. 外観モードとは何かを説明し、実際の例を示します。
  2. アピアランスモードの長所と短所は何ですか?
  3. アピアランスモードとアダプターモードの違いは何ですか?
  4. アピアランスパターンとシングルトンパターンを同時に使用できますか?
  5. Javaで出現パターンを実装するにはどうすればよいですか?
  6. 外観モードに適用できるシナリオは何ですか?
  7. 出現パターンを使用した実際の例を教えてください。
  8. ファサード パターンでサブシステム間の依存関係を処理するにはどうすればよいですか?
  9. アピアランス モードとプロキシ モードの違いは何ですか?
  10. 新しいサブシステムを追加する必要がある場合、外観モードで拡張するにはどうすればよいですか?

ここに画像の説明を挿入します


おすすめ

転載: blog.csdn.net/qq_41464123/article/details/133125894