愛には努力と意欲が必要です。忘れられない愛を手に入れたいときは、忘れられない苦しみに耐える準備をしなければなりません。さもなければ、軽く試さないでください。
デザインパターンの学習、近い将来23のデザインパターンについてブログを書きますので、お楽しみに〜
– 2021/1/9
ブリッジモードとは何ですか?
呼ばれるブリッジモード、ブリッジモードでは、彼らはすべて独立して変更することができるよう、その実現部から抽象的な部分を分離します。
使用するシーン
クラスに複数のレベルの継承があることがわかった場合、継承の代わりに集計を使用して、ブリッジパターンを使用することを検討できます。
例えば
この写真を見てください:
网络图(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つの独立した「緯度」(ブランドとタイプ)に適しています
オリジナリティは簡単ではありません、あなたの好きなものは私にとってあなたの最大のサポートです、あなたの好きなものを残してください〜