阅读下列说明和C++代码,回答下列问题。
[说明]
在超市销售管理系统中通常需要根据顾客需求打印购物小票,在购物小票中体现所购买的物品名称、数量、单价及总价等信息,以及购物时间、收银员号码等基本信息。而且有的需要打印票据的头信息(如欢迎辞等),有的需要打印票据的页脚信息(如促销打折广告提示信息等),有的只需要打印票据的内容。并且这些信息的内容及打印位置也需要根据具体情况而发生变动,相当于是对购物小票的额外装饰了。
以上这些功能采用装饰器(Decorator)设计模式来设计,得到的类图如图7-15所示。
以下C++代码可为购物小票动态添加各种抬头和注释信息。
[C++代码]
#include <iostream.h>
class cxiaopiao
public:
______=0;
;
class cjutixiaopiao:______
public:
void DaYinXiaoPiao()
cout <<"票据正文" <<endl;
;
class czhuangshixiaopiao: ______
______:
cxiaopiao* xpobj;
public:
czhuangshixiaopiao(cxiaopiao* obj)
xpobj=obj;
______=0;
;
class headerxiaopiao: public czhuangshixiaopiao
public:
headerxiaopiao(cxiaopiao* obj) : czhuangshixiaopiao(obj)
void DaYinXiaoPiao()
cout<<"抬头"<<endl;
xpobj->DaYinXiaoPiao();
;
class footerxiaopiao: public czhuangshixiaopiao
public:
footerxiaopiao(cxiaopiao* obj) : czhuangshixiaopiao(obj)
void DaYinXiaoPiao()
xpobj->DaYinxiaoPiao();
cout<<"脚注"<<endl;
;
int main()
czhuangshixiaopiao* xiaopiao=new headerxiaopiao (new footerxiaopiao
(new cjutixiaopiao));
xiaopiao->DaYinXiaoPiao();
cout<<endl;
return 0;
装饰器(Decorator)模式是一种______型设计模式,其设计意图是:______。
参考答案:virtual void DaYinXiaoPiao()
public cxiaopiao
public cxiaopiao
protected
virtual void DaYinXiaoPiao()
结构
当不能采用生成子类的方法进行扩充时,动态地给一个对象添加一些额外的功能