JAVAデザインパターン9: ブリッジモード、抽象部分と実装部分を分離

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


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


1. ブリッジモードとは何ですか?

ブリッジパターンは、抽象部分と実装部分を独立して変更できるように分離し、継承関係を関連関係に変換することで分離と柔軟性を実現する構造的な設計パターンです。

ブリッジ モードでは、抽象部分は抽象クラスまたはインターフェイスで表され、実装部分は 1 つ以上の具象クラスで表されます。ブリッジ モードの鍵は、参照を含めることによって抽象部分と実装部分を結合することです。抽象クラスの実装クラスへの分離。

ブリッジ パターンの中心的な考え方は、抽象化と実装を分離して、独立して変更できるようにすることです。この設計パターンは、次の3 3に非常に適しています。3つの状況。

  1. クラスに独立して変化する 2 つ以上の次元がある場合、ブリッジ パターンを使用してそれらを分離し、各次元の変更を独立して行うことができます。
  2. ブリッジ パターンは、抽象部分と実装部分の間に安定した関係を確立する必要がある場合、および各次元で多数のサブクラスの作成を回避する必要がある場合に使用できます。
  3. クラスを複数のプラットフォームまたはシステム上で拡張する必要がある場合、ブリッジ パターンを使用すると、拡張部分を抽象部分から独立させることができます。

ブリッジ パターンは、抽象化と実装を分離し、システムの構造をより明確にし、クラス間の結合を減らすことにより、より柔軟でスケーラブルな設計ソリューションを提供します。

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


2. ブリッジモードの例

以下は、ブリッジ モードの実装を示す簡単な Java コードの例です。

まず、形状Shapeを表す抽象クラスを定義します

public abstract class Shape {
    
    
    protected Color color;

    public Shape(Color color) {
    
    
        this.color = color;
    }

    public abstract void draw();
}

次に、円Circleを表す実装クラスを定義します

public class Circle extends Shape {
    
    
    public Circle(Color color) {
    
    
        super(color);
    }

    @Override
    public void draw() {
    
    
        System.out.println("Draw a circle in " + color.getColor());
    }
}

次に、四角形Rectangleを表す実装クラスを定義します

public class Rectangle extends Shape {
    
    
    public Rectangle(Color color) {
    
    
        super(color);
    }

    @Override
    public void draw() {
    
    
        System.out.println("Draw a rectangle in " + color.getColor());
    }
}

次に、 colorColorを表す抽象クラスを定義します

public abstract class Color {
    
    
    public abstract String getColor();
}

次に、 redRedColorを表す実装クラスを定義します

public class RedColor extends Color {
    
    
    @Override
    public String getColor() {
    
    
        return "red";
    }
}

最後に、ブリッジ モードを使用してオブジェクトを作成し、呼び出しを行うことができます。

public class BridgePatternDemo {
    
    
    public static void main(String[] args) {
    
    
        Color red = new RedColor();
        Shape circle = new Circle(red);
        circle.draw();

        Color green = new GreenColor();
        Shape rectangle = new Rectangle(green);
        rectangle.draw();
    }
}

上記のコードを実行すると、出力は次のようになります。

Draw a circle in red
Draw a rectangle in green

Shape形状と色の 2 つの次元はブリッジ モードによって分離されておりColor、元のコードを変更することなく独立して拡張および変更できます。

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


3. ブリッジモードの適用シナリオ

ブリッジ モードは4 4未満ですカテゴリー4の状況に該当します。慎重に検討してください。

  1. 抽象実装と具象実装を個別に拡張できるようにする場合は、ブリッジ パターンを使用します。ブリッジ パターンでは、抽象化部分と実装部分を分離できるため、相互に影響を与えることなく独立して変更できます。
  2. ブリッジ パターンは、クラスに複数の独立して変化するディメンションがある場合に使用されます。ブリッジ パターンでは、異なる次元での変更を異なるクラス階層に分離できるため、各次元での変更を独立して実行できます。
  3. 抽象部分と実装部分の間に安定した関係を確立し、各次元で多数のサブクラスを作成することを避けたい場合は、ブリッジ パターンを使用します。ブリッジ パターンでは、抽象部分と実装部分を分離できるため、クラス爆発の問題を引き起こすことなく、それらを独立して変更できます。
  4. ブリッジ モードは、複数のプラットフォームまたはシステムにわたるスケーリングが必要な場合に使用されます。ブリッジ モードでは、拡張部分を抽象部分から独立させることができ、さまざまなプラットフォームやシステム上で簡単に変更および拡張できます。

以下は4 4です学生は、ブリッジ モードのこれら 4 つの一般的なアプリケーション シナリオを注意深く学習するように求められます。

  • グラフィカルインターフェースのウィンドウとオペレーティングシステムのアダプターとの関係は、ブリッジモードを使用して実現できます。ウィンドウは抽象部分となり、さまざまなオペレーティング システム用のアダプターは実装部分になります。
  • リレーショナル データベースや非リレーショナル データベースなど、さまざまな種類のデータ ストレージの場合、ブリッジ モードを使用して共通のデータ アクセス層インターフェイスを抽象化し、さまざまなデータベース タイプに基づいて特定のデータ アクセス クラスを実装できます。
  • ゲーム開発では、ブリッジモードを使用してゲームキャラクターのさまざまな属性を扱うことができます。キャラクターを抽象部分として使用し、属性を実装部分として使用できます。ブリッジモードを通じて、キャラクターの属性を柔軟に追加したり、属性を追加したり、実装したりすることができます。変更されました。
  • 電子機器のリモコンでは、ブリッジモードを使用してリモコンの機能を異なる電子機器から分離することができるため、リモコンをさまざまな電子機器に適合させることができます。

ブリッジ パターンは、抽象化と実装を分離する必要があり、それらを個別に変更できるあらゆるシナリオで使用できます。クラス間の結合を減らし、機能の拡張と変更を容易にする、柔軟で拡張可能な設計ソリューションを提供します。

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


4. ブリッジモードのインタビューの質問

  1. ブリッジモードとは何ですか? 説明してもらえますか?
  2. Bridgeパターンと他のデザインパターンの違いは何ですか?
  3. ブリッジモードの利点は何ですか?
  4. ブリッジモードのデメリットは何ですか?
  5. ブリッジモードの応用例を教えてください。
  6. ブリッジモードとアダプターモードの違いは何ですか?
  7. ブリッジ モードを使用する必要があるのはどのような場合ですか?
  8. ブリッジモードと複合モードの違いは何ですか?
  9. ブリッジモードではコードが複雑になりますか?
  10. ブリッジ パターンは単一責任原則とオープンクローズ原則に従っていますか?

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


おすすめ

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