外観モード


ファサード パターンは、システムの複雑さを隠し、クライアントがシステムにアクセスできるインターフェイスを提供します。このタイプのデザイン パターンは、システムの複雑さを隠すために既存のシステムにインターフェイスを追加する構造パターンです。

このパターンには、クライアント リクエストの簡素化されたメソッドと、既存のシステム クラス メソッドへの委任された呼び出しを提供する単一のクラスが含まれます。

はじめに

目的: サブシステム内の一連のインターフェイスに一貫したインターフェイスを提供する。外観パターンは、このサブシステムを使いやすくする高レベルのインターフェイスを定義します。

主なソリューション: 複雑なシステムの内部サブシステムへのアクセスの複雑さを軽減し、それとのクライアントのインターフェイスを簡素化します。

いつ使用するか: 1. クライアントはシステム内の複雑な接続を知る必要はなく、システム全体が「受付係」を提供するだけで済みます。 2. システムへの入り口を定義します。

解決方法: クライアントはシステムに結合されておらず、外観クラスはシステムに結合されています。

キーコード: クライアントと複雑なシステムの間に別のレイヤーを追加します。今回は、呼び出しシーケンス、依存関係などが適切に処理されます。

応用例: 1. 医師の診察を受けるために病院に行くときは、登録し、クリニックに行き、価格を交渉し、薬を入手する必要があるため、患者または患者の家族は非常に複雑な気分になります。受付があれば受付に任せるだけでとても便利です。 2. JAVA の 3 層開発モデル。

利点: 1. システムの相互依存性を軽減します。 2. 柔軟性を向上させます。 3. 安全性の向上。

短所: 開閉原則に従わない 変更が面倒な場合は継承や書き換えは適さない。

使用シナリオ: 1. 複雑なモジュールまたはサブシステムへの外部アクセスを提供するモジュール。 2. サブシステムは比較的独立しています。 3. 低レベルの人材によって引き起こされるリスクを防止します。

注: 階層構造では、外観パターンを使用してシステム内の各レイヤーへの入り口を定義できます。

実装

ShapeインターフェースとShapeインターフェースを実装するエンティティクラスを作成します。次のステップは、外観クラス ShapeMaker を定義することです。

ShapeMaker クラスは、エンティティ クラスを使用して、これらのクラスへのユーザー呼び出しを表します。 FacadePatternDemo のデモ クラスは、ShapeMaker クラスを使用して結果を表示します。

facade_pattern_uml_diagram.jpg

ステップ 1

インターフェースを作成します。

Shape.java

public interface Shape {
   void draw();
}

ステップ 2

インターフェースを実装するエンティティクラスを作成します。

Rectangle.java

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Rectangle::draw()");
   }
}

Square.java

public class Square implements Shape {

   @Override
   public void draw() {
      System.out.println("Square::draw()");
   }
}

Circle.java

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Circle::draw()");
   }
}

ステップ 3

外観クラスを作成します。

ShapeMaker.java

public class ShapeMaker {
   private Shape circle;
   private Shape rectangle;
   private Shape square;

   public ShapeMaker() {
      circle = new Circle();
      rectangle = new Rectangle();
      square = new Square();
   }

   public void drawCircle(){
      circle.draw();
   }
   public void drawRectangle(){
      rectangle.draw();
   }
   public void drawSquare(){
      square.draw();
   }
}

ステップ 4

この外観クラスを使用して、さまざまなタイプの形状を描画します。

FacadePatternDemo.java

public class FacadePatternDemo {
   public static void main(String[] args) {
      ShapeMaker shapeMaker = new ShapeMaker();

      shapeMaker.drawCircle();
      shapeMaker.drawRectangle();
      shapeMaker.drawSquare();		
   }
}

ステップ 5

出力を確認します。

りー