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

[C++代码]
class Component
public:
______ void prtTicket() = 0;
;
class SalesTicket : public Component
public:
void prtTicket()
cout<<"Sales Ticket!"<<endl;
;
class Decorator : public Component
public:
virtual void prtTicket();
Decorator(Component *myC);
private:
______ myComp;
;
Decorator∷Decorator(Component *myC)
myComp = myC;
void Decorator∷prtTicket()
myComp->prtTicket();
class Footer : public Decorator
public:
Footer(Component *myC);
void prtTicket();
void prtFooter();
;
Footer∷Footer(Component *myC) : ______
void Footer∷prtFooter()
cout<<"Footer"<<end1;
void Footer∷prtTicket ()
______;
prtFooter();
class SalesOrder
public:
void prtTicket();
;
void SalesOrder∷prtTicket()
Component *myST;
myST = new Footer______;
myST->prtTicket();