Java ビルダー パターンとは何ですか?どのように達成するか? (コード付き)

不言
リリース: 2018-09-20 14:31:39
オリジナル
1914 人が閲覧しました

この記事では、Java ビルダー パターンとは何なのかについて説明します。どのように達成するか? (コードを添付します)。困っている友人が参考になれば幸いです。

ビルダー モード

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

ビルダー パターンは、複数の単純なオブジェクトを使用して、複雑なオブジェクトを段階的に構築します。
Builder クラスは、最終的なオブジェクトを段階的に構築します。この Builder クラスは他のオブジェクトから独立しています。
ビルダー パターンは主にソフトウェア システムで使用され、通常は特定のアルゴリズムを使用してさまざまな部分のサブオブジェクトで構成される「複雑なオブジェクト」の作成に直面することがあります。要件では、この複雑なオブジェクト オブジェクトの個々の部分は劇的な変更に直面することがよくありますが、それらを組み合わせるアルゴリズムは比較的安定しています

2. ビルダー モードの具体的な実装

構造図

Java ビルダー パターンとは何ですか?どのように達成するか? (コード付き)

ビルダー モードの 4 つの役割:
  1. Builder: 製品オブジェクトの各コンポーネントの構造を標準化するための抽象インターフェイスを提供します。このインターフェイスは、複合オブジェクトのどの部分を作成するかを指定しますが、特定のオブジェクト コンポーネントの作成は含まれません。

  2. ConcreteBuilder: ビルダー インターフェイスを実装して、さまざまなビジネス ロジックの複雑なオブジェクトの各部分の作成を具体化します。構築プロセスが完了したら、製品の例を提供します。

  3. ディレクター: 特定のビルダーを呼び出して、複雑なオブジェクトのさまざまな部分を作成します。ディレクターは、特定の製品情報には関与しませんが、オブジェクトのすべての部分が完全に作成されているかどうかを確認することのみを担当します。一定の順序で作成します。

  4. Product: 作成される複合オブジェクト。

Java コードの実装
1. ヒューマン エンティティ クラスを作成します

package com.designpattern.builderPattern;

/**
 * 对象 人
 *
 * @author zhongtao on 2018/9/17
 */
public class Human {

    private String head;
    private String body;
    private String hand;
    private String foot;

    public String getHead() {
        return head;
    }

    public void setHead(String head) {
        this.head = head;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getHand() {
        return hand;
    }

    public void setHand(String hand) {
        this.hand = hand;
    }

    public String getFoot() {
        return foot;
    }

    public void setFoot(String foot) {
        this.foot = foot;
    }
}
ログイン後にコピー

2. ヒューマン ビルダー インターフェイスを作成します

package com.designpattern.builderPattern;

/**
 * 造人接口 规定造人的规范 需要头、身体、手、脚
 *
 * @author zhongtao on 2018/9/17
 */
public interface BuilderHuman {

    void buildHead();

    void buildBody();

    void buildHand();

    void buildFoot();

    /**
     * 返回创建的对象
     */
    Human createHuman();

}
ログイン後にコピー

3 、ConcreteBuilderさまざまなタイプの人物を作成します

tallperson

package com.designpattern.builderPattern;

/**
 * 高个子的人
 *
 * @author zhongtao on 2018/9/17
 */
public class TallPersonBuilder implements BuilderHuman {

    Human human;

    public TallPersonBuilder() {
        human = new Human();
    }

    @Override
    public void buildHead() {
        human.setHead("普通的头脑");
    }

    @Override
    public void buildBody() {
        human.setBody("壮实,高大的身体");
    }

    @Override
    public void buildHand() {
        human.setHand("长手");
    }

    @Override
    public void buildFoot() {
        human.setFoot("长脚");
    }

    @Override
    public Human createHuman() {
        return human;
    }
}
ログイン後にコピー

smartHuman

package com.designpattern.builderPattern;

/**
 * 聪明的人
 *
 * @author zhongtao on 2018/9/17
 */
public class SmartHumanBuilder implements BuilderHuman {

    Human human;

    public SmartHumanBuilder() {
        human = new Human();
    }

    @Override
    public void buildHead() {
        human.setHead("高智商的头脑");
    }

    @Override
    public void buildBody() {
        human.setBody("健康的身体");
    }

    @Override
    public void buildHand() {
        human.setHand("普通的手");
    }

    @Override
    public void buildFoot() {
        human.setFoot("普通的脚");
    }

    @Override
    public Human createHuman() {
        return human;
    }
}
ログイン後にコピー

4。Director ビルダー パターンの中心は、さまざまな人物を作成するために特定のビルダーを呼び出します

package com.designpattern.builderPattern;

/**
 * 管理造人的顺序 BuilderHuman不同,则创建的人不同
 * @author zhongtao on 2018/9/17
 */
public class HumanDirector {

    public Human createHumanByDirector(BuilderHuman builderHuman){
        builderHuman.buildHead();
        builderHuman.buildBody();
        builderHuman.buildHand();
        builderHuman.buildFoot();

        return builderHuman.createHuman();
    }
}
ログイン後にコピー

5. ビルダー モードのテスト

package com.designpattern.builderPattern;

import org.junit.Test;

/**
 * 测试
 *
 * @author zhongtao on 2018/9/17
 */
public class BuilderPatternTest {

    /**
     * 测试建造者模式
     */
    @Test
    public void test() {
        HumanDirector humanDirector = new HumanDirector();
        //创建高个子的人
        Human humanByDirector = humanDirector.createHumanByDirector(new TallPersonBuilder());
        System.out.println(humanByDirector.getHead());
        System.out.println(humanByDirector.getBody());
        System.out.println(humanByDirector.getHand());
        System.out.println(humanByDirector.getFoot());

        System.out.println("------简单的分割线------");
        //创建聪明的人
        Human smartHuman = humanDirector.createHumanByDirector(new SmartHumanBuilder());
        System.out.println(smartHuman.getHead());
        System.out.println(smartHuman.getBody());
        System.out.println(smartHuman.getHand());
        System.out.println(smartHuman.getFoot());
    }
}
ログイン後にコピー

3. ビルダー モードの長所と短所

利点:
  1. ビルダーは独立しており、拡張が簡単です。

  2. 詳細なリスク管理が容易。

欠点:
  1. 製品には共通点が必要であり、範囲は限られています。

  2. 内部の変更が複雑な場合は、多数の構築クラスが存在します。

注:
ファクトリー モードとは異なり、ビルダー モードではパーツの組み立て順序に注意が必要です。

以上がJava ビルダー パターンとは何ですか?どのように達成するか? (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!