[说明]
在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合将小对象组合,成复杂的对象。
以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图6-1显示了各个类间的关系。
以下是Java语言实现,能够正确编译通过。
[Java代码]
//Builder. java文件
public (1) class Builder
public abstract void makeTitle(String title);
public abstract void makeString(String str);
public abstract void makeItems(String[] items);
public abstract Object getResult();
//Director. java文件
public class Director
private (2) builder;
public Director(Builder builder)
this. builder = builder;
public Object construct()
builder.makeTitle("Greeting");
builder.makeString("从早上到白天结束");
builder.makeItems(new String[]"早安", "午安",);
builder.makeString("到了晚上");
builder.makeItems(new String[]("晚安", "好梦",);
return builder.getResult();
//TextBuilder.java文件
public class TextBuilder (3) Builder
private StringBuffer buffer = new StringBuffer();
public void makeTitle(String title)
buffer.append("『" + title + "』"\n\n");
public void makeString(String str)
buffer.append(’■’ + str + "\n\n ");
public void makeItems(String[] items)
for(int i = 0; i< (4) ; i++)
buffer.append(’·’ + items[i] + "\n");
buffer.append("\n");
public Object getResult()
return buffer.toString();
//Main.java文件
public class Main
public static void main(String[] args)
Director director = new Director(new TextBuilder());
String result = (String)director. (5) ;
System.out.println(result);
参考答案:construct()
解析:Builder类含有多个abstract方法,故应声明为abstract,空(1)应填abstract。
由构造函数中的语句this.builder=builder;及形参声明Builder builder,可判知空(2)应填Builder。
由类图知,TextBuilder是Builder的子类,因此空(3)应填extends,声明继承关系。
来看空(4),此处for循环是将items中的对象添加到buffer中,空(4)处是循环终止条件:下标达到items的长度,故应填items.length。
空(5)是真正进行文件的构造,应填construct()。事实上,Director类:仅提供了该方法,自然是调用该方法。