Javaデザインパターンのブリッジモード(6)

愛には努力と意欲が必要です。忘れられない愛を手に入れたいときは、忘れられない苦しみに耐える準備をしなければなりません。さもなければ、軽く試さないでください。

デザインパターンの学習、近い将来23のデザインパターンについてブログを書きますので、お楽しみに〜

– 2021/1/9

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

呼ばれるブリッジモード、ブリッジモードでは、彼らはすべて独立して変更することができるよう、その実現部から抽象的な部分を分離します。

Baidu百科事典

使用するシーン

クラスに複数のレベルの継承があることがわかった場合、継承の代わりに集計を使用して、ブリッジパターンを使用することを検討できます。

例えば

この写真を見てください:

网络图(1.1)


分析:

コンピューターを購入する予定で、コンピューターが次のように分割されているとします。

  • デスクトップPC
  • ラップトップ
  • タブレット

デスクトップコンピューターは、ノートブックやタブレットと同様に、Lenovoデスクトップ、Appleデスクトップなどに細分化できます。

通常の考え方でコードを書く場合、コンピュータークラスを最上位のベースと見なす必要がありますか?

次に、デスクトップコンピューター、ラップトップ、およびタブレットはコンピュータークラスから継承します

最後に、Lenovoデスクトップ、Appleデスクトップ、Dellデスクトップはデスクトップコンピュータから継承されています...

それで、それがこのように書かれている場合、問題は何ですか?

彼は多重継承関係が存在しない、レイヤーは継承のレイヤーであり、コードは高度に結合され、コードはメンテナンスに役立たず、場所を変更すると、別の場所が競合する可能性があります、

たとえば、デスクトップコンピュータのモニターを変更したい場合、場所を変更すると、彼のサブクラスを継承すると競合が発生する可能性があります(ここでのサブクラスはLenovoデスクトップ、Appleデスクトップ、Dellデスクトップを指します)

例としてLenovoデスクトップを取り上げます。

  • Lenovoはブランドです
  • コンピューターは製品です

ブランドと製品を個々のカテゴリー混合することは、単一責任の原則に違反します

ソリューション

网络图(1.2)


このようなコードを書くと、はるかに良いでしょうか?

Apple、Lenovo、Dellをブランドに

タブレット、ノートブック、デスクトップはタイプに分類されます

Appleデスクトップが必要な場合それ赤いボックスの位置ですか(表示网络图(1.2)

Lenovoノートブック必要な場合青いボックスの位置です(表示网络图(1.2)

Appleタブレットが欲しいのならそれ黒いフレームの位置ですか(表示网络图(1.2)


例としてAppleデスクトップを取り上げます。

网络图(1.3)


デスクトップはカテゴリに属し、Appleはブランドに属し、それらを接続するポイントはブリッジです

誰もが今解決策を持っている必要がありますか?

ブランドとタイプは別々に抽象クラスになります

その後、Apple、Lenovo、Dellはブランドカテゴリを実現します

タブレットノートブックデスクトップ実装タイプ

次に、それらを組み合わせて組み合わせ、「ブリッジ」を実現します

コード

IBrandブランドカテゴリー:

public abstract class ABrand {
    
    
   public abstract void info();
}

AType型クラス:

public abstract class AType {
    
    
    public abstract void type();
}

次に、個別に実装します。

デルは、ブランドを実現するブランドです。

public class Dell extends ABrand {
    
    
    @Override
    public void info() {
    
    
        Log.i("桥接模式","戴尔");
    }
}

Lenovoは、ブランドを実現するブランドです。

public class Lenovo  extends ABrand {
    
    
    @Override
    public void info() {
    
    
        Log.i("桥接模式","联想");
    }
}

コンピューター(コンピューター)はタイプであり、ATypeを実現し、ブランド(ABrand)を組み合わせます。

public class Computer extends AType {
    
    
    private ABrand brand;//相当于桥 品牌
    
    public Computer(ABrand brand) {
    
    
        this.brand = brand;
    }
    @Override
    public void type() {
    
    
        brand.info();
        Log.i("桥接模式:","电脑");
    }
}

コンピュータ(ノートブック)はタイプであり、ATypeを実現し、ブランド(ABrand)を組み合わせます。

public class Notebook extends AType {
    
    
    private ABrand brand;
    public Notebook(ABrand brand) {
    
    
        this.brand = brand;
    }
    @Override
    public void type() {
    
    
        brand.info();
        Log.i("桥接模式:","笔记本");
    }
}

コードを使用する(例1):

 //电脑 品牌
Computer computer = new Computer(new Lenovo());
computer.type();

Lenovoブランドをコンピューターに導入し、Lenovoコンピューターを入手する

Log图(2.1)


コードを使用する(例2):

//电脑 品牌
Computer computer = new Computer(new Lenovo());
computer.type();

Notebook notebook = new Notebook(new Dell());
notebook.type();

新しいノートブック、Dellブランドのインポート、Dellノートブックの入手!

Log图(2.1)

総括する

利点:

  • ブリッジモードは多重継承に似ている場合がありますが、多重継承は単一責任の原則に違反し、再利用性が低くなります。ブリッジモードはサブクラスの数を大幅に減らし、基本的にコストを維持し、管理を減らします。
  • ブリッジモードは、開閉の原則(拡張のために開く、変更のために閉じる)を満たします。たとえば、Raytheonブランドなどの新しい「緯度」を追加すると、RaytheonコンピューターやRaytheonノートブックなどを簡単に入手できます。

短所:

  • ブリッジモードはコード設計の難しさを増し、集約関係は抽象層で確立されます。これには開発者にとって一定の要件があります。
  • ブリッジモードは、特定の制限がある2つの独立した「緯度」(ブランドとタイプ)に適しています

完全なコード

デザインパターン/デザイン原則のカタログ

オリジナリティは簡単ではありません、あなたの好きなものは私にとってあなたの最大のサポートです、あなたの好きなものを残してください〜

おすすめ

転載: blog.csdn.net/weixin_44819566/article/details/112387613