问题 问答题

[说明]
在某些系统中,存在非常复杂的对象,可以采用循序渐进的方式进行组合,将小对象组合成复杂的大对象。
以下实例展示了Builder(生成器)模式。该实例用来建立“文件”,文件内容包括:一个标题、一串字符以及一些有项目符号的项目。Builder类规定组成文件的方法,Director类利用这个方法产生一份具体的文件。图5-1显示了各个类间的关系。
[图5-1]


以下是C++语言实现,能够正确编译通过。
[C++代码]
class Builder
public:
virtual void makeTitle(string title) = 0;
virtual void makestring(string str) = 0;
virtual void makeItems( (1) items) = 0;
virtual string getResult() = 0;
;
class Director
private:
(2) builder;
public:
Director(Builder *builder)
this->builder = builder;

string construct()
vectoritems;
items.push_back("早安"); items.push_back("午安");
builder->makeTitle("Greeting");
builder->makeString("从早上到白天结束");
builder->makeItems(items);
builder->makeString("到了晚上");
(3) ;//清空items向量
items.push_back("晚安"); items.push_back("好梦");
builder->makeItems(items);
return builder->getResult();

;
class TextBuilder : public (4)
private:
string buffer;
public:
TextBuilder()
buffer = " ";

void makeTitle(string title)
buffer += "=======================================\n";
buffer += "『" + title + "』\n";
buffer += "\n";

void makeString(string str)
buffer += "■" + str + "\n";
buffer += "\n";

void makeItems(vectoritems)
vector::iterator it;
for(it = items.begin(); it != items.end(); it++)
buffer += "." + *it + "\n";

buffer += "\n";

string getResult()
buffer += "========================\n";
return buffer;

;
int main()

Director *director = new Director(new TextBuilder());
string result = (string)director-) (5) ;
cout< return 0;

答案

参考答案:construct()

解析:首先来看空(2),由名字可猜想builder是一个Builder类对象,由构造函数中的语句this->builder=builder;及形参声明Builder*builder,可判知空(2)应填Builder*。
由注释可知空(3)是用来清空items向量的,items是一个vector对象,此处并未提供清空方法,应该是调用库函数,故应调用items.clear()。
现在来看空(1),由语句builder->makeItems(items);及vectoritems;可知,空(1)应填vector
继续看空(4),由类图知,TextBuilder是Builder的子类,因此此处应填Builder,声明继承关系。
空(5)是真正进行文件的构造,应填construct()。事实上,Director类仅提供了该方法,自然是调用该方法。

判断题
单项选择题