本文概览:介绍了Builder模式的使用场景和实例。
1 使用场景
对于一个类,成员变量特别多,比如说有10个成员,但是这10个成员并不都是必需的,在构造一个对象实例时,可能只用到其中的m个成员。如果此时我们写构造函数,可能需要写很多个,在此种场景下,就引入了Builder模式。
2 实例
1、构建Builder时,需要注意的有
- Builder类中,包含被构造类(如FileFormat)的所有成员
- Builder类需要提供一个create()方法。
- Builder类中给成员赋值的方法名和变量名称一致。(一个命名方式的建议)
- 被构造类(如FileFormat)需要提供一个构造函数,参数是Builder。
2、Demo
(1)构建一个Builder
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
public class FileFormat { /** * 文件结束标志。 */ private String engTag; /** * 文件开始正文的行数。文件起始行是1。 */ private Integer startLine; public static class Builder { private String engTag; private Integer startLine; public Builder endTag(String endTag) { this.engTag = endTag; return this; } public Builder startLine(Integer startLine) { this.startLine = startLine; return this; } public FileBodyFormat create() { return new FileBodyFormat(this); } } private FileFormat(Builder builder) { this.engTag = builder.engTag; this.startLine = builder.startLine; } public String getEngTag() { return engTag; } public void setEngTag(String engTag) { this.engTag = engTag; } public Integer getStartLine() { return startLine; } public void setStartLine(Integer startLine) { this.startLine = startLine; } } |
(2)使用Builder
1 2 3 4 5 |
FileBodyFormat fileBodyFormat = new FileBodyFormat.Builder() .bodyLineParser(new BodyLineParserWithFieldLength(bodyLineCheckers)) // 基于长度的解析器 .batchCapacity(batchCapacity) // 每批读取个数 .create(); |
(全文完)