某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。 【C++代码】 #include using namespace std; class Invoice{ public: (1){ cout<<"This is the content of the invoice!"<<endl; } }; class Decorator:public Invoice{ Invoice*ticket; public: Decorator(lnvoice*t){ticket=t;} void printInvoice( ){ if(ticket!=NULL) (2); } }; class HeadDecorator:public Decorator{ public: HeadDecorator(lnvoice*t):Decorator(t){} void printInvoice( ){ cout<<"This is the header of the invoice!"<<endl; (3); } }; class FootDecorator:public Decorator{ public: FootDecorator(Invoice*t):Decorator(t){} void printlnvoice( ){ (4); cout<<"This is the footnote of the invoice!"<<endl; } }; int main(void){ Invoice t; FootDecorator f(&t); HeadDecorator h(&f); h.printInvoice( ); cout<<”------------------------”<<endl; FootDecorator a(NULL); HeadDecorator b((5)); b.printInvoice( ); return 0; } 程序的输出结果为: This is the header of the invoice! This is the content of the invoice! This is the footnote of the invoice! ---------------------------- This is the header of the invoice! This is the footnote of the invoice!