首頁  >  文章  >  Java  >  Java建造者模式是什麼?如何實現? (附代碼)

Java建造者模式是什麼?如何實現? (附代碼)

不言
不言原創
2018-09-20 14:31:391933瀏覽

本篇文章帶給大家的內容是關於Java建造者模式是什麼?如何實現? (附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

建造者模式

一、什麼是建築者模式?

  建造者模式(Builder Pattern)使用多個簡單的物件一步一步建構一個複雜的物件。
  一個 Builder 類別會一步一步建構最終的對象,該類別獨立於其他對象。
  建造者模式主要解決在軟體系統中,有時候面臨著"一個複雜物件"的創建工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨劇烈的變化,但是將它們組合在一起的演算法卻相對穩定

二、建造者模式的具體實作

結構圖

Java建造者模式是什麼?如何實現? (附代碼)

#建造者模式中的四個角色:
  1. Builder:給出一個抽象接口,以規範產品物件的各個組成成分的建造。這個介面規定要實現複雜物件的哪些部分的創建,並不涉及具體的物件部件的創建。

  2. ConcreteBuilder:實作Builder接口,針對不同的商業邏輯,具體化複雜物件的各部分的創建。在建造過程完成後,提供產品的實例。

  3. Director:呼叫具體建造者來創建複雜物件的各個部分,在指導者中不涉及具體產品的信息,只負責保證對象各部分完整創建或按某種順序創建。

  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、創建造人的Builder 介面

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());
    }
}

三、建造者模式的優缺點

#優點:
  1. 建造者獨立,易於擴展。

  2. 方便控制細節風險。

缺點:
  1. 產品必須有共同點,範圍有限制。

  2. 如內部變化複雜,會有很多的建造類別。

注意事項:

與工廠模式的區別,建造者模式更加關注與零件組裝的順序。

以上是Java建造者模式是什麼?如何實現? (附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn