ホームページ  >  記事  >  Java  >  Javaビルダーパターンとは

Javaビルダーパターンとは

WBOY
WBOY転載
2023-05-02 12:04:061319ブラウズ

1. 質問する

家を建てる必要があるとします: そのプロセスは、杭を打ち、壁を作り、蓋をすることです。住宅には一般住宅、高層ビル、別荘など様々な種類がありますが、どの住宅でも手順は同じですが、要件は同じではありません 3) 要件を満たせるプログラムを書いてください。

従来の考え方は、次のクラス図の形式である必要があります。 .

Javaビルダーパターンとは

#この書き方の利点は、理解しやすく、操作しやすいことです。

欠点は、設計されたプログラム構造が単純すぎること、キャッシュ層オブジェクトが設計されていないこと、プログラムを適切に拡張および保守できないことです。つまり、この設計スキームは、製品(つまり、住宅)とその製品を生み出すプロセス(つまり、住宅建設プロセス)をカプセル化しており、その結合が強化されています。

解決策: 製品と製品構築プロセスを分離 => ビルダー パターン。

2.ビルダーパターンとは何ですか?

  • ビルダー パターン (ビルダー パターン) は、ジェネレーター パターンとも呼ばれ、オブジェクト構築パターンです。複雑なオブジェクト (抽象カテゴリ) の構築プロセスを抽象化し、さまざまな実装方法を抽象化できます。

  • ビルダー パターンでは、複雑なオブジェクトを段階的に作成します。これにより、ユーザーは複合オブジェクトのタイプのみを指定できます。オブジェクトとコンテンツは、ユーザーが内部の具体的な構築の詳細を知る必要がなくても構築できます。

#そしてビルダー モードには 4 つの主要な役割があります:

    ##Product (製品ロール): 特定の製品オブジェクト
  • Builder (抽象ビルダー): Product オブジェクトの各コンポーネントによって指定されたインターフェイス/抽象クラスを作成します。
  • #ConcreteBuilder (コンクリート ビルダー): インターフェイスを実装し、さまざまなコンポーネントを構築およびアセンブルします。
  • Director (ディレクター): Builder インターフェイスを使用してオブジェクトを構築しますこれは主に複雑なオブジェクトを作成するために使用されます。主に 2 つの機能があります。1 つは顧客とオブジェクトの生産プロセスを分離すること、もう 1 つは製品オブジェクトの生産プロセスを制御することです。
  • 3.ケースコード
上記の家を建てるケースをビルダーパターンで解くと、クラス図は以下のようになります(4つの主要な役割がすべてこの中にあります) )、House クラスは特定の製品 (建てたい家の実体) に関しては、HouseBuilder は抽象ビルダーであり、具体的な構築プロセスは内部的に実装されるのではなく、その下のいくつかのサブクラスによって完了します。コンクリート ビルダー (CommonHouse 、 HighBuilding)、司令官は HouseDirector で、製品オブジェクトの建設プロセス (どのようなタイプの家を建てたいか) を担当します。最後のクライアントはテスト クラスです。

package com.szh.builder;
 
public class House {
    private String basic;
    private String wall;
    private String roof;
 
    //setter and getter
}
package com.szh.builder;
 
//抽象的建造者
public abstract class HouseBuilder {
 
    protected House house = new House();
 
    //将建造的流程写好, 抽象的方法
    public abstract void buildBasic();
    public abstract void buildWall();
    public abstract void buildRoof();
 
    //建造房子好, 将产品(房子)返回
    public House buildHouse() {
        return house;
    }
 
}
package com.szh.builder;
 
public class CommonHouse extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println(" 普通房子打地基5m.... ");
    }
 
    @Override
    public void buildWall() {
        System.out.println(" 普通房子砌墙10cm.... ");
    }
 
    @Override
    public void buildRoof() {
        System.out.println(" 普通房子添加屋顶.... ");
    }
}
package com.szh.builder;
 
public class HighHouse extends HouseBuilder {
    @Override
    public void buildBasic() {
        System.out.println(" 高楼打地基100m.... ");
    }
 
    @Override
    public void buildWall() {
        System.out.println(" 高楼砌墙20cm.... ");
    }
 
    @Override
    public void buildRoof() {
        System.out.println(" 高楼添加透明屋顶.... ");
    }
}
package com.szh.builder;
 
//指挥者,这里去指定制作流程,返回产品
public class HouseDirector {
 
    HouseBuilder houseBuilder;
 
    //构造器传入 houseBuilder
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }
 
    //通过setter传入 houseBuilder
    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }
 
    //如何处理建造房子的流程,交给指挥者
    public House constructHouse() {
        houseBuilder.buildBasic();
        houseBuilder.buildWall();
        houseBuilder.buildRoof();
        return houseBuilder.buildHouse();
    }
}
package com.szh.builder;
 
public class MainTest {
    public static void main(String[] args) {
        //盖普通房子
        CommonHouse commonHouse = new CommonHouse();
        //准备创建房子的指挥者
        HouseDirector houseDirector = new HouseDirector(commonHouse);
        //完成盖房子,返回产品(普通房子)
        houseDirector.constructHouse();
 
        System.out.println("--------------------------");
 
        //盖高楼
        HighHouse highHouse = new HighHouse();
        //重置建造者
        houseDirector.setHouseBuilder(highHouse);
        //完成盖房子,返回产品(高楼)
        houseDirector.constructHouse();
    }
}

Javaビルダーパターンとは##3.JDK のビルダー パターン

##StringBuilder クラス、その親クラス、実装されている関連インターフェイスを見てみましょう。

Javaビルダーパターンとは

Javaビルダーパターンとは

Javaビルダーパターンとは##Appendable インターフェイスは複数の追加メソッドを定義します (抽象メソッド)、つまり、Appendable は抽象ビルダーであり、抽象メソッドを定義します。

Javaビルダーパターンとは

AbstractStringBuilder は Appendable インターフェイス メソッドを実装します。ここでの AbstractStringBuilder はすでにビルダーですが、インスタンス化できません。
  • StringBuilder はコマンダーおよび特定のビルダーとして機能します。構築メソッドの実装は AbstractStringBuilder によって完了され、StringBuilder は AbstractStringBuilder を継承します。
  • 4. Builder パターンの概要
  • クライアント (ユーザー プログラム) は、ビルダー パターンの内部構成の詳細を知る必要はありません。製品、製品自体、および製品 作成プロセスは分離されているため、同じ作成プロセスで異なる製品オブジェクトを作成できます。

各特定のビルダーは比較的独立しており、他の特定のビルダーとは何の関係もないため、特定のビルダーを置き換えたり、新しい特定のビルダーを追加したりするのは簡単です。異なる製品オブジェクト。
  • を使用すると、製品作成プロセスをより詳細に制御できます。複雑な製品の作成手順をさまざまな方法に分割すると、作成プロセスが明確になり、プログラムを使用して作成プロセスを制御しやすくなります。
  • 新しい具象ビルダーを追加する場合、元のクラス ライブラリのコードを変更する必要はありません。コマンダー クラスは、抽象ビルダー クラス用にプログラムされています。システムは拡張が簡単で、「」に準拠しています。開閉原理」。
  • ビルダー モードで作成された製品は、一般に共通点が多く、コンポーネントも似ていますが、製品間の差異が大きい場合は、ビルダー モードの使用には適さないため、ビルダー モードを使用します。範囲には一定の制限があります。

  • 製品の内部変更が複雑な場合、そのような変更を実装するために多くの特定のビルダー クラスを定義する必要が生じ、システムが非常に大きくなる可能性があります。この場合、ビルダーモードを選択するかどうかを検討する必要があります。

  • 抽象ファクトリ パターンは、製品ファミリの作成を実装します。製品ファミリは、異なる分類次元を持つ製品の組み合わせである一連の製品です。抽象ファクトリ パターンを使用すると、どの製品がどの工場で生産されているかに注目してください。ビルダー モードでは、指定された設計図に従って製品を構築する必要があり、スペアパーツを組み合わせて新しい製品を生産することが主な目的です。

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

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