Javaデザインパターンにおけるブリッジモードの詳細説明

黄舟
リリース: 2017-09-22 11:22:21
オリジナル
1419 人が閲覧しました

この記事では、主に Java デザイン パターンのブリッジ モードを紹介し、ブリッジ モードの概念、機能、実装方法、および関連する注意事項をサンプル形式で詳しく説明します。 Java 設計パターンと例。参考として、以下のように全員と共有してください:

コンセプト:

ブリッジパターン: 抽象部分を実装部分から分離し、独立して変更できるようにします。

ブリッジ モードは、継承関係を関連付け関係に変換することで、クラス間の結合を減らし、コードの記述量を減らします。

ブリッジモードはいつ使用しますか?

簡単に言うと、オブジェクトの特性を抽象化すると、オブジェクトの特性属性が非常に抽象化されるため、属性を再度抽象化する必要があります。

そうしないと、特定のサブクラスの数が幾何級数的に増加し、拡張することが困難になります。既存のコードを保守する方法はありません。

たとえば、携帯電話の 2 つのオブジェクトを抽象化すると、オペレーティング システム、CPU、画面、オペレーター ネットワークなど、その属性のいくつかは非常に複雑になります。これらの属性を直接定義することはできず、再度抽象化する必要があります。特定の携帯電話オブジェクトはこれらの属性の組み合わせですが、単純な組み合わせではなく、属性が属性として独自の機能を実現する必要があります。このような設計では、コードの保守と拡張が容易になります。

注:

このモデルについて話すとき、私が言ったり書いたりする例が正しいかどうかは保証できません。結局のところ、私はこのモデルについては初めてであり、すべての例は個人的な理解に基づいています。 私が考えるブリッジモードの説明図:

以下は例です:

1. まず抽象クラス、abstractを定義し、オブジェクトの特性を記述します。

将来のブリッジングと拡張のために、オブジェクトのプロパティの次元を分割します。

package test.design.bridge;
public abstract class CellPhone {
  private String cellPhoneName;
  public CellPhoneSystem cellPhoneSystem;
  public CellPhoneCPU cellPhoneCPU;
  public void works(){
    System.out.println("---------------------");
    System.out.println("This cellphone is:"+this.getCellPhoneName()+",welcome to use. ");
    System.out.println("This cellphone detail infomation:");
    System.out.println("系统类型:"+this.getCellPhoneSystem().getSystemName());
    System.out.println("cpu型号:"+this.getCellPhoneCPU().getCpuName());
    System.out.println("---------------------");
  }
  public String getCellPhoneName() {
    return cellPhoneName;
  }
  public void setCellPhoneName(String cellPhoneName) {
    this.cellPhoneName = cellPhoneName;
  }
  public CellPhoneSystem getCellPhoneSystem() {
    return cellPhoneSystem;
  }
  public void setCellPhoneSystem(CellPhoneSystem cellPhoneSystem) {
    this.cellPhoneSystem = cellPhoneSystem;
  }
  public CellPhoneCPU getCellPhoneCPU() {
    return cellPhoneCPU;
  }
  public void setCellPhoneCPU(CellPhoneCPU cellPhoneCPU) {
    this.cellPhoneCPU = cellPhoneCPU;
  }
}
ログイン後にコピー

2. 属性次元の抽象化。 (インターフェース定義を使用できます。キーは特定の機能に応じて異なります)

package test.design.bridge;
/**
 * 属性cpu被抽象成一个维度,为了以后扩展
 * @author lushuaiyin
 *
 */
public abstract class CellPhoneCPU {
  public CellPhone cellPhone;
  public String cpuName;
  public void cpuWorks(){
    System.out.println("I am cpu. My pattern is:"+this.getCpuName());
    System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName());
  }
  public CellPhone getCellPhone() {
    return cellPhone;
  }
  public void setCellPhone(CellPhone cellPhone) {
    this.cellPhone = cellPhone;
    this.getCellPhone().setCellPhoneCPU(this);// 装配(桥接,或者可以认为对象类与其属性类的传递)
  }
  public String getCpuName() {
    return cpuName;
  }
  public void setCpuName(String cpuName) {
    this.cpuName = cpuName;
  }
}
ログイン後にコピー

package test.design.bridge;
/**
 * 属性操作系统被抽象成一个维度,为了以后扩展
 * @author lushuaiyin
 *
 */
public abstract class CellPhoneSystem {
  public CellPhone cellPhone;
  public String SystemName;
  public void systemWorks(){
    System.out.println("I am "+this.getSystemName()+" system.");
    System.out.println("I am working for this cellphone:"+this.getCellPhone().getCellPhoneName());
  }
  public CellPhone getCellPhone() {
    return cellPhone;
  }
  public void setCellPhone(CellPhone cellPhone) {
    this.cellPhone = cellPhone;
    this.getCellPhone().setCellPhoneSystem(this);// 装配(桥接,或者可以认为对象类与其属性类的传递)
  }
  public String getSystemName() {
    return SystemName;
  }
  public void setSystemName(String systemName) {
    SystemName = systemName;
  }
}
ログイン後にコピー

3. 特定のディメンション属性オブジェクト。

ここでは、オペレーティング システムの属性と CPU の属性にそれぞれ 2 つの特定のオブジェクトを定義します。

次元を拡張する必要がある場合に、次元を拡張する方法について説明します。

携帯電話オブジェクトを定義します


package test.design.bridge;
public class AndroidSystem extends CellPhoneSystem{
}
ログイン後にコピー

メイン関数をテストします


package test.design.bridge;
public class IOSSystem extends CellPhoneSystem{
}
ログイン後にコピー

拡張する必要がある場合は、新しい次元属性を定義します

package test.design.bridge;
/**
 * 双核cpu
 * @author Administrator
 *
 */
public class TwoCore extends CellPhoneCPU{
}
ログイン後にコピー

package test.design.bridge;
/**
 * 四核cpu
 * @author Administrator
 *
 */
public class FourCore extends CellPhoneCPU{
}
ログイン後にコピー

テスト印刷;

りー

以上がJavaデザインパターンにおけるブリッジモードの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート