天天看點

建立型模式--建造者模式【Builder Pattern】

介紹

建造者模式使用多個簡單的對象一步一步建構成一個複雜的對象。這種類型的設計模式屬于建立型模式,它提供了一種建立對象的最佳方式。

建造者(Builder Pattern)模式的定義:指将一個複雜對象的構造與它的表示分離,使同樣的建構過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。它是将一個複雜的對象分解為多個簡單的對象,然後一步一步建構而成。它将變與不變相分離,即産品的組成部分是不變的,但每一部分是可以靈活選擇的。

架構應用

  • java.lang.StringBuilder#append() (非線程安全)
  • java.lang.StringBuffer#append() (線程安全)
  • java.nio.ByteBuffer#put()(還CharBuffer,ShortBuffer,IntBuffer,LongBuffer

    FloatBuffer和DoubleBuffer)

  • javax.swing.GroupLayout.Group#addComponent()
  • 所有的實作 java.lang.Appendable
  • BaseBuilder、XMLConfigBuilder(MyBatis)

模式的結構

建造者(Builder)模式的主要角色如下。

  • 産品角色(Product):它是包含多個組成部件的複雜對象,由具體建造者來建立其各個滅部件。
  • 抽象建造者(Builder):它是一個包含建立産品各個子部件的抽象方法的接口,通常還包含一個傳回複雜産品的方法 getResult()。
  • 具體建造者(Concrete Builder):實作 Builder 接口,完成複雜産品的各個部件的具體建立方法。
  • 指揮者(Director):它調用建造者對象中的部件構造與裝配方法完成複雜對象的建立,在指揮者中不涉及具體産品的資訊。

源碼

  • java.lang.StringBuilder#append()
@Override
public StringBuilder append(boolean b) {
    super.append(b);
    return this;
}
           
  • java.lang.StringBuffer#append()
@Override
public synchronized StringBuffer append(String str) {
    toStringCache = null;
    super.append(str);
    return this;
}
           
  • java.nio.ByteBuffer#put()
public final ByteBuffer put(byte[] src) {
    return put(src, 0, src.length);
}
           
  • ByteBuffer的簡單使用
package org.spring.pattern;

import java.nio.ByteBuffer;

/**
 * @author yanyugang
 * @description ByteBuffer的簡單使用: https://www.jianshu.com/p/80bd222fa971
 * @date 2019/9/5 21:43
 */
public class BuilderPatternTest {
    public static void main(String[] args) {
        ByteBuffer buffer=ByteBuffer.allocate(1024);
        // 寫入資料
        buffer.put("Hello World ".getBytes());
        buffer.put("Hello Java ".getBytes());
        buffer.put("Good Morning ".getBytes());
        System.out.println(buffer.toString());
        byte[] array = buffer.array();
        System.out.println(new String(array));
    }
}

           

參考文檔

  • 建造者模式(Bulider模式)詳解

推薦文檔:

  1. https://blog.csdn.net/u013256816/article/details/50978024

繼續閱讀