ホームページ  >  記事  >  Java  >  Javaビルダーパターンの特徴と適用シナリオ

Javaビルダーパターンの特徴と適用シナリオ

angryTom
angryTom転載
2019-11-26 15:18:334039ブラウズ

Javaビルダーパターンの特徴と適用シナリオ

#ビルダー パターン

パターンの定義と特徴

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

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

このモデルの主な利点は次のとおりです。

各特定のビルダーは互いに独立しているため、システムの拡張に役立ちます。顧客は製品の内部構成を詳しく知る必要がなく、細かなリスクの管理が容易になります。

欠点は次のとおりです。

製品のコンポーネントは同じである必要があるため、使用範囲が制限されます。製品の内部変更が複雑な場合、このパターンでは多くのビルダー クラスが追加されます。

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

(推奨ビデオ:

java ビデオ チュートリアル)

パターンの構造と実装

Builder パターンは次のように構成されていますプロダクト、抽象ビルダー、具体ビルダー、コマンダーの4つの要素から構成されており、その基本構造と実装方法を分析してみましょう。

1. パターンの構造

Builder パターンの主な役割は次のとおりです。

製品の役割 (製品): これは複数のコンポーネントを含む複雑なオブジェクトであり、そのさまざまなコンポーネントは特定のビルダーによって作成されます。抽象ビルダー (Builder): これは、製品のさまざまなサブコンポーネントを作成するための抽象メソッドを含むインターフェイスであり、通常は、複雑な製品を返すメソッド getResult() も含まれます。 Concrete Builder: Builder インターフェイスを実装して、複雑な製品の各コンポーネントの特定の作成方法を完了します。ディレクター: ビルダー オブジェクト内のコンポーネントの構築およびアセンブリ メソッドを呼び出して、複雑なオブジェクトの作成を完了します。ディレクターには、特定の製品情報は含まれません。

構造図は次のとおりです:

Javaビルダーパターンの特徴と適用シナリオ

2. パターンの実装

(1) 製品role : 複数のコンポーネント部分を含む複雑なオブジェクト。

public class Product {
    private String partA;
    private String partB;
    private String partC;
    public void setPartA(String partA) {
        this.partA = partA;
    }
    public void setPartB(String partB) {
        this.partB = partB;
    }
    public void setPartC(String partC) {
        this.partC = partC;
    }
    public void show() {
        //显示产品的特性
    }
}

(2) 抽象ビルダー: 製品のさまざまなサブコンポーネントを作成するための抽象メソッドが含まれています。

public abstract class Builder {
    //创建产品对象
    protected Product product = new Product();
    public abstract void buildPartA();
    public abstract void buildPartB();
    public abstract void buildPartC();
    //返回产品对象
    public Product getResult() {
        return product;
    }
}

(3) 具象ビルダー: 抽象ビルダー インターフェイスを実装します。

public class ConcreteBuilder extends Builder {
    public void buildPartA() {
        product.setPartA("建造 PartA");
    }
    public void buildPartB() {
        product.setPartA("建造 PartB");
    }
    public void buildPartC() {
        product.setPartA("建造 PartC");
    }
}

(4) コマンダー: ビルダーのメソッドを呼び出して、複雑なオブジェクトの作成を完了します。

public class Director {
    private Builder builder;
    public Director(Builder builder) {
        this.builder = builder;
    }
    //产品构建与组装方法
    public Product construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
        return builder.getResult();
    }
}

(5) クライアント

public class Client {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director(builder);
        Product product = director.construct();
        product.show();
    }
}

パターンの適用シナリオ

Builder パターンは複雑なオブジェクトとその製品を作成します 個々の部分は多くの場合直面します変化は激しいですが、それらを組み合わせるアルゴリズムは比較的安定しているため、主に以下のような場面で使われます。

作成されたオブジェクトはより複雑で、複数のコンポーネントで構成されており、各コンポーネントは複雑な変化に直面していますが、コンポーネント間の構築順序は安定しています。複雑なオブジェクトの作成に使用されるアルゴリズムは、オブジェクトの構成部品やその組み立て方法とは独立しています。つまり、製品の構築プロセスと最終的な表現は独立しています。

この記事は、php 中国語 Web サイトの

java チュートリアル 列からのものです。学習へようこそ!

以上がJavaビルダーパターンの特徴と適用シナリオの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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