C# デザインパターン - 構造パターン ブリッジパターン

序文

        ブリッジ パターンは、抽象化と実装を分離し、独立して変更できるようにする設計パターンです。このパターンには、ブリッジとして機能するインターフェイスが含まれており、エンティティ クラスの機能をインターフェイス実装クラスから独立させます。これら 2 種類のクラスは、相互に影響を与えることなく構造を変更できます。

        Bridge パターンの主な目的は、実装と抽象化を分離することで、2 つを独立して変更できるようにすることです。このタイプのデザイン パターンは構造パターンであり、抽象化と実装の間の橋渡し構造を提供することによってこれを実現します。

        たとえば、テレビのリモコンの基本機能 (オン/オフ、音量制御など) は抽象的であり、これらの機能はさまざまな実装 (テレビのさまざまなブランド) を通じて実装できます。ブリッジ モードがなければ、テレビの各ブランドに専用のリモコンが必要になります。ただし、ブリッジ モードを使用すると、ユニバーサル リモコンを使用して、ブリッジ モードを通じてさまざまなブランドのテレビを制御できます。

ブリッジ モードには次の主な役割が含まれます。

  1. 抽象化ロール: 抽象クラスを定義し、実装されたオブジェクトへの参照を含みます。
  2. 拡張抽象化 (洗練された抽象化) ロール: 抽象ロールのサブクラスであり、親クラスにビジネス メソッドを実装し、組み合わせ関係を通じて実装されたロール内のビジネス メソッドを呼び出します。
  3. 実装者ロール: 実装されたロールのインターフェイスを定義します。これは、抽象ロールを拡張することで呼び出すことができます。
  4. 具体的な実装者ロール: 実装されたロール インターフェイスの特定の実装を提供します。

コード例 

次のケースでは、ペット ショップの動物と色の組み合わせを実現するためにブリッジ モードが使用されていることを示します。このケースを通常の方法で記述すると、m (種類) × n ( color)クラスを使用しますが、ブリッジ パターンを使用します。m (タイプ) + n (カラー)クラスを記述し、それらを使用してさまざまな要件を結合するだけです。

アニマルインターフェース

最初の動物を作成するインターフェースを実装する

public interface IAnimal
{
    void animal(string colour);
}

ドッグクラスの実施

public class Dog:IAnimal
{
    public void animal(string colour)
    {
        Console.WriteLine("这只狗的颜色是:"+colour);
    }
}

cat クラスを実装します。後でさらに型が必要になった場合は、実装クラスを追加するだけです。

public class Cat:IAnimal
{
    public void animal(string colour)
    {
        Console.WriteLine("这只猫的颜色是:"+colour);
    }
}

カラーピッカー

動物のタイプと色の組み合わせはこのクラスで実装されており、カラー セレクターで動物が宣言され、コンストラクターが設定され、動物クラスが渡され、動物を表示するための抽象メソッドが記述されます。

public abstract class ColourSelect
{
    protected IAnimal Animal;


    protected ColourSelect(IAnimal animal)
    {
        Animal = animal;
    }

    public abstract void outAnimal(string colour);

}

White はカラー セレクターを継承し、コンストラクターのパラメーターを親クラスに渡し、outAnimal メソッドをオーバーライドしてその中でanimal を呼び出します。実際、これは最初に書いた、animal + color を出力するものです。

public class black : ColourSelect
{
    public black(IAnimal animal) : base(animal)
    {
    }

    public override void outAnimal(string colour)
    {
        Animal.animal(colour);
    }
}

 黒

同上

public class white : ColourSelect
{
    public white(IAnimal animal) : base(animal)
    {
    }

    public override void outAnimal(string colour)
    {
        Animal.animal(colour);
    }
}

試験結果

new は、カラー セレクターを継承し、cat クラスに渡す black クラスです。したがって、black.outAnimal は cat クラスのanimal メソッドを呼び出し、パラメータ black を渡します。したがって、Console.WriteLine("この猫の色は: "+colour);この猫の色を出力します: 黒、次の白い犬の例は上記と同じです。

ブリッジモードの利点

         ブリッジ モードによりシステムの拡張性が向上し、元のシステムを変更することなく、変化する 2 つのディメンションのいずれかを拡張できます。例: 別のビデオ ファイル タイプ wmv がある場合、VideoFile インターフェイスを実装するために別のクラスを定義するだけで済み、他のクラスを変更する必要はありません。実装の詳細は顧客に透過的です

使用するシーン

        クラスに独立して変化する 2 つの次元があり、両方の次元を拡張する必要がある場合。システムが継承を使用したくない場合、または多レベルの継承によりシステム クラスの数が急激に増加した場合。システムがコンポーネントの抽象的な役割と具体的な役割の間でより高い柔軟性を必要とする場合。2 つのレベル間に静的な継承関係を確立することを避け、ブリッジ パターンを使用して抽象化層でそれらのレベル間の関連付けを確立します。

おすすめ

転載: blog.csdn.net/weixin_65243968/article/details/132324700