介绍
建造者模式使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
建造者(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模式)详解
推荐文档:
- https://blog.csdn.net/u013256816/article/details/50978024