生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样

题库2022-08-02  24

问题 生成器(Builder)模式的意图是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。图5-1所示为其类图。【C++代码】#include<iostream>#include<string>using namespace std;class Product{private:string partA,partB;public:Product(  ){}void setPartA(const string&s){PartA=s;}void setPartB(const string&s){PartB=s;}//其余代码省略};class Builder{public:(1);virtual void buildPartB(  )=0;(2);};class ConcreteBuilder1:public Builder{private:Product*product;public:ConcreteBuilder1(  ){product=new Product(  );}void buildPartA(  ){(3)("Component A");}void buildPartB(  ){(4)("Component B");}Product*getResult(  ){return product;}//其余代码省略};class ConcreteBuilder2:public Builder{/*代码省略*/};class Director{private:Builder*builder;public:Director(Builder*pBuilder){builder=pBuilder;}void construct(  ){(5);//其余代码省略}//其余代码省略};int main(  ){Director*director1=new Director(new ConcreteBuilder1(  ));director1->construct(  );delete director1;return 0;}

选项

答案

解析 (1)virtual void buildPartA()=0
(2)virtual Product*getResult()=0
(3)product->setPartA
(4)product->setPartB
(5)builder->buildPartA();
或builder->buildPartB();
本题考查的是面向对象程序设计,是JAVA语言与设计模式的结合考查。本题涉及的设计模式是构建器模式,将复杂类的构造过程推迟到子类实现。
对于第一空、第二空,根据实现接口的类,补充其接口缺失的方法,因此,空(1)和空(2)分别填写:virtual void buildPartA()=0和virtual Product*getResult()=0,二者可以互换;
对于第三空、第四空,是根据product类方法进行的补充,与具体产品的实现保持一致,因此,分别填写:product->setPartA,product->setPartB;
对于第五空,由于在填空后面跟随的是代码省略,因此题目并不严谨,缺失的语句可以有builder->buildPartA();builder->buildPartB()。
转载请注明原文地址:https://www.tihaiku.com/congyezige/2410686.html

最新回复(0)