第一篇 生成及初始化对象 第四章 - 建造者模式
刚生成的对象通常还需要经过初始化才能正常工作。对象封装的信息越多,它的初始化过程也越繁琐。
小令《天净沙・秋思》意象丰富,我们以此为例考察对象的初始化过程。
// 秋思
public class QiuSi {
private String a, b, c, x, y, z;
/* Getters and Setters */
}
// 测试类
public class Test {
public void test() {
// 生成对象
QiuSi obj = new QiuSi();
// 初始化
obj.setA("枯藤");
obj.setB("老树");
obj.setC("昏鸦");
obj.setX("小桥");
obj.setY("流水");
obj.setZ("人家");
}
}
初始化对象时调用了大量的Setter方法,看上去缺少章法。
怎么优化一下代码呢?来看看建造者模式提供的设计思路。
// 秋思
public class QiuSi {
private String a, b, c, x, y, z;
// 建造方法(1)
public QiuSi first(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
return this;
}
// 建造方法(2)
public QiuSi second(String x, String y, String z) {
this.x = x;
this.y = y;
this.z = z;
return this;
}
/* Getters and Setters */
}
这里有两个设计要点:
(1)将赋值语句分组封装在若干建造方法里,使对象的初始化过程变得井然有序。
(2)每个建造方法都返回对象本身(this),使得它们可以被链式调用,形如 obj.m1().m2().m3()。
优化效果如下。
// 测试类
public class Test {
public void test() {
// 生成对象
QiuSi obj = new QiuSi();
// 初始化(链式调用)
obj.first("枯藤", "老树", "昏鸦")
.second("小桥", "流水", "人家");
}
}
浙公网安备 33010602011771号