问题 填空题

阅读以下说明和Jrdva代码,将应填入 (n) 处的字句写在对应栏内。

[说明]

在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。

[图6-1]

[Java代码]

//Component.java文件

public (1) class Component {

abstract publ ic void prtTicket();

}

//salesTicket.java文件

public class SalesTicket extends Component{

public void prtTicket(){

//Sales ticket printing code here

System.out.printin("SalesTicket");

}

}

//Decorator.java文件

publ ic abstract class Decorator extends Component{

public void prtTicket(){

if(myComp!=null)myComp.prtTicket();

}

private (2) myComp;

public Decorator(Component myC){

myComp=myC;

}

}

//Footer.java文件

public class Footer extends Decorator {

public Footer(Component myC){

(3)

}

public void prtTicket(){

(4)

prtFooter();

}

publ ic void prtFooter(){

//place printing footer code here

System.out.println("Footer");

}

}

//salesorder.java文件

public class SalesOrder{

void prtTicket(){

Component myST;

myST=new Footer( (5) );

//Print Ticket with footers as needed

myST.prtTicket();

}

}

(5)处填()。

答案

参考答案:new SalesTicket()

解析:

方法prtTicket()声明为abstract,即是抽象方法,故Component类应为抽象类,因此空(1)应填abstract。 由Decorator构造函数以及类图可知,Decorator包含一个Component对象引用,故空(2)应填Component。 函数Footer(Component *myC)是Footer类的构造函数,故空(3)处是对基类的构造,因此空(3)应填super(myC)。 Footer类的prtTicket0方法是先打印“基本”票据,再打印脚注。因此空(4)是打印“基本”票据,Footer类是Decorator的子类,故应先调用基类的打印方法,在此应填super.prtTicket()。super是对基类的引用。 参照Footer类的参照函数,空(5)应为一个Component对象指针,这里是要打印带脚注的票据,故此处应填new SalesTicket()。

问答题 简答题
单项选择题