ホームページ  >  記事  >  Java  >  Java デザイン パターンのビルダー パターンとは何ですか?

Java デザイン パターンのビルダー パターンとは何ですか?

WBOY
WBOY転載
2023-05-11 11:37:05760ブラウズ

1.ビルダーモードとは何ですか?

ソフトウェア開発プロセスでは、非常に複雑なオブジェクトを作成する必要がある場合があります。オブジェクトは通常、特定の手順に従って複数のサブコンポーネントで構成されます。

たとえば、コンピューターを自分で組み立てる場合、CPU、マザーボード、メモリ、ハードディスク、グラフィックス カード、シャーシ、モニター、キーボード、マウス、その他のコンポーネントから組み立てる必要があります。たとえば、学校が 100 台のコンピュータを購入する必要がある場合、学校が部品を購入して自分で組み立てることは不可能であり、必要な構成を購入者に伝え、購入者がコンピュータ会社に買いに行く必要があります。企業が組み立てて購入者に引き渡し、最終的に学校に引き渡します。

上記の例からわかるように、各コンポーネントは柔軟に選択できます (さまざまなコンピューター構成のレベルを含む) が、作成手順は似ています。ただし、このタイプの製品の作成は、先に紹介したファクトリー パターンでは説明できず、ビルダー パターンのみがこのタイプの製品の作成を適切に説明できます。

2. ビルダー パターンの定義

ビルダー パターンの定義:

複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにします。このような設計パターンはビルダー パターンと呼ばれます。複雑なオブジェクトを複数の単純なオブジェクトに分割し、それを段階的に構築します。これは、変更と不変性を区別します。つまり、製品のコンポーネントは変更されませんが、各部分は柔軟に選択できます。

一文でまとめる: 複雑なオブジェクトの構築をその表現から分離し、同じ構築プロセスで異なる表現を作成できるようにする

タイプ: クラス パターンを作成する

3. ビルダー パターンの長所と短所

利点:

  • 優れたカプセル化、構築とプレゼンテーションの分離

  • 拡張性の向上、特定の各ビルダーは互いに独立しているため、システムの分離に役立ちます

  • #顧客は製品の内部構成の詳細を知る必要がなく、ビルダーは徐々に改良することができます作成プロセス、他のモジュールに影響を与えず、詳細なリスクを制御しやすい

欠点:

  • 製品のコンポーネント同じでなければならないため、使用範囲が制限されます。 範囲

  • 製品の内部変更が複雑な場合、製品の内部変更が発生すると、ビルダーも同時に変更を加える必要があります。 、その後のメンテナンスコストが大きくなります

注:

ビルダー パターンとファクトリー パターンでは焦点が異なります。ビルダー パターンはコンポーネントの組み立てプロセスに焦点を当てます。一方、ファクトリ メソッド パターンはコンポーネントの作成プロセスに重点を置いていますが、この 2 つは組み合わせて使用​​できます。

4. ビルダー パターンの構造

ビルダー パターンの主な役割は次のとおりです:

  • 製品の役割 (Product): それコンポーネントを構成する複数の Complex オブジェクトが含まれており、各コンポーネントは特定のビルダーによって作成されます。

  • 抽象ビルダー (ビルダー): 製品のさまざまなコンポーネントを構築および組み立てるためのビルダー インターフェイスを実装します。定義され、作成される表現を明確にし、プロダクトを取得するためのインターフェイスを提供します。

  • Concrete Builder: Builder インターフェイスを使用してオブジェクトを構築し、構築プロセスをガイドします

  • Director: ビルダー オブジェクトのコンポーネント構築メソッドとアセンブリ メソッドを呼び出して、複雑なオブジェクトの作成を完了します。ディレクターには特定の製品情報は含まれません

構造図 (参照)インターネットから):

Java デザイン パターンのビルダー パターンとは何ですか?

5. ビルダー モード コードのデモ

たとえば、次の車を構築する必要があります:

製品カテゴリ:

/**
 * 产品类
 */
public class Car {

    //车的建造过程

    private String wheel;  //车轮
    private String skeleton;  //车架
    private String engine;   //发动机


    public String getWheel() {
        return wheel;
    }

    public void setWheel(String wheel) {
        this.wheel = wheel;
    }

    public String getSkeleton() {
        return skeleton;
    }

    public void setSkeleton(String skeleton) {
        this.skeleton = skeleton;
    }

    public String getEngine() {
        return engine;
    }

    public void setEngine(String engine) {
        this.engine = engine;
    }
}

インストラクター カテゴリ:

/**
 * 指导者
 */

//汽车总监
public class CarDirector {

    public Car constructCar(ICarBuilder builder){
        builder.buildwheel();
        builder.buildSkeleton();
        builder.buildEngine();

        return builder.buildCar();
    }
}

具体ビルダー:

/**
 * 具体建造者:生产具体的东西
 */

public class ConcreteBuilder implements ICarBuilder{


    Car car;

    public ConcreteBuilder(){
        car = new Car();
    }

    @Override
    public void buildwheel() {
        car.setWheel("轮子");
    }

    @Override
    public void buildSkeleton() {
        car.setSkeleton("车身结构");
    }

    @Override
    public void buildEngine() {
        car.setEngine("发动机");
    }

    @Override
    public Car buildCar() {
        return this.car;
    }
}

抽象ビルダー (インターフェイス):

/**
 * 抽象建造者
 */
public interface ICarBuilder {

    public void buildwheel();   //构建车轮
    public void buildSkeleton();   //构建骨架
    public void buildEngine(); //构建发动机

    Car buildCar();

}

テスト カテゴリ:

public class Test {

    public static void main(String[] args){

        //新建一个总监(替你去买汽车)
        CarDirector director = new CarDirector();

        Car car = director.constructCar(new ConcreteBuilder());

        System.out.println(car.getWheel());
        System.out.println(car.getEngine());
        System.out.println(car.getSkeleton());
    }
}

コードのデモを読み、記事の最初の部分と組み合わせると、理解できます。 !

6. ビルダー パターンの適用シナリオ

ビルダー パターンとファクトリー パターンの唯一の違いは、複雑なオブジェクトの作成です。つまり、単純なオブジェクトを作成する場合は、通常、ファクトリ パターンを使用して作成し、複雑なオブジェクトを作成する場合は、ビルダー パターンの使用を検討できます。

主なアプリケーション シナリオ:

  • 同じメソッド、実行順序が異なると、異なる結果が生成されます

  • 複数のコンポーネントまたはパーツを 1 つのオブジェクトにまとめることができますが、生成される結果は異なります

  • プロダクト クラスが非常に複雑であるか、プロダクト クラス内のさまざまな呼び出しシーケンスがさまざまな効果を生み出します

  • オブジェクトの初期化は、多くのパラメーターがあり、特に複雑です。多くのパラメータにはデフォルト値があります

7. ビルダー モードとファクトリ モードの違い

  • ビルダー モードでは、メソッドの呼び出し順序がより重視されます。 . ファクトリ パターンはオブジェクトの作成に重点を置いています

  • #オブジェクトの作成の強度が異なります。ビルダー パターンはさまざまな複雑なコンポーネントで構成される複雑なオブジェクトを作成します。ファクトリ パターンによって作成されるオブジェクトすべて同じです
  • 焦点が異なります。ファクトリ モードではオブジェクトを作成するだけで済みますが、ビルダー モードではオブジェクトを作成するだけでなく、オブジェクトのどの部分が構成されているかも認識されます。から構成されています###
  • ビルダーモードは構築プ​​ロセスの順序によって異なり、最終的なオブジェクトコンポーネントの構成も異なります

以上がJava デザイン パターンのビルダー パターンとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。