构建者模式-Builder(Java实现)
构建者模式-Builder
Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来.
本文中的例子: 一篇小文章包括标题title, 内容string, 和详情item.
如果想要构建如下的一个文本:
============================== 『 Greeting 』 ■ 从早上至下午 ・早上好。 ・下午好。 ■ 晚上 ・晚上好。 ・晚安。 ・再见。 ==============================
那么在建造者模式中, 只需要:
1. 设定标题为Greeting
2. 一段主要内容为"从早上至下午" 的文本
3. 然后加上两条详情"早上好" "下午好".
4. 再加一段内容为"晚上"的文本
5. 然后再加上三条详情"晚上好" "晚安" "再见"
就像建房子一样, 一步一步组装起来, 就是一篇完整的文章了.
本例子中的类关系如下:

依赖关系如下:

Builder接口
定义了构建者的方法.
public interface Builder {
void makeTitle(String title);
void makeString(String str);
void makeItems(String[] items);
void close();
}
TextBuilder类
这是Builder接口的一个具体实现, 用于根据输入构建出类似Markdown风格的内容
public class TextBuilder implements Builder {
private StringBuffer out = new StringBuffer();
@Override
public void makeTitle(String title) {
out.append("==============================\n");
out.append("『 " + title + " 』\n");
out.append("\n");
}
@Override
public void makeString(String str) {
out.append("■ " + str + "\n");
out.append("\n");
}
@Override
public void makeItems(String[] items) {
for (int i = 0; i < items.length; i++) {
out.append(" ・" + items[i] + "\n");
}
out.append("\n");
}
@Override
public void close() {
out.append("==============================\n");
}
public String getResult() {
return out.toString();
}
}
Director类
这是一个指挥官, 利用Builder来进行组装内容
public class Director {
private Builder builder;
public Director(Builder builder) { // 因为接收的参数是Builder类的子类
this.builder = builder; // 所以可以将其保存在builder字段中
}
public void construct() { // 编写文档
builder.makeTitle("Greeting"); // 标题
builder.makeString("从早上至下午"); // 字符串
builder.makeItems(new String[]{ // 条目
"早上好。",
"下午好。",
});
builder.makeString("晚上"); // 其他字符串
builder.makeItems(new String[]{ // 其他条目
"晚上好。",
"晚安。",
"再见。",
});
builder.close(); // 完成文档
}
}
Main
本类用于运行测试
public class Main {
public static void main(String[] args) {
// 构建者
TextBuilder textbuilder = new TextBuilder();
// 指挥者
Director director = new Director(textbuilder);
// 构建
director.construct();
// 构建好的内容
System.out.println(textbuilder.getResult());
}
}
运行结果如下:

---------------------------------------------------------
学如不及,犹恐失之
学如不及,犹恐失之

浙公网安备 33010602011771号