装饰模式(DECORATOR)案例分析

案例分析:

我们去超市买东西,会收到购物小票,上面是你购买的物品名称、数量、单价及总价等信息,以及购物时间,收银员号码等最基本的信息,这些是基本不变的。不过有时超市还会在这张票据的上面或下面打印其他信息,例如:欢迎辞、促销广告等,而且这些信息的内容及打印位置也不固定,相当于是对购物小票的额外装饰了。

意图:

为一个对象动态连接附加的指责。根据案例,本程序可为购物小票动态添加各种抬头和注释。

描述:

装饰模式是一种对象结构型模式,这种模式主要用于对象

结构图:

 

程序代码:

#include <iostream.h>

 

class cxiaopiao

{

public:

     virtual void DaYinXiaoPiao()=0;

};

class cjutixiaopiao:public cxiaopiao

{

public:

     void DaYinXiaoPiao()

     {

         cout<<"票据正文"<<endl;

     }

};

class czhuangshixiaopiao:public cxiaopiao

{

protected:

     cxiaopiao* xpobj;

public:

     czhuangshixiaopiao(cxiaopiao* obj)

     {

         xpobj=obj;

     }

     virtual void DaYinXiaoPiao()=0;

};

class header1xiaopiao:public czhuangshixiaopiao

{

public:

     header1xiaopiao(cxiaopiao* obj):czhuangshixiaopiao(obj){}

     void DaYinXiaoPiao()

     {

         cout<<"抬头1"<<endl;

         xpobj->DaYinXiaoPiao();

     }

};

class header2xiaopiao:public czhuangshixiaopiao

{

public:

     header2xiaopiao(cxiaopiao* obj):czhuangshixiaopiao(obj){}

     void DaYinXiaoPiao()

     {

         cout<<"抬头2"<<endl;

         xpobj->DaYinXiaoPiao();

     }

};

class footer1xiaopiao:public czhuangshixiaopiao

{

public:

     footer1xiaopiao(cxiaopiao* obj):czhuangshixiaopiao(obj){}

     void DaYinXiaoPiao()

     {

         xpobj->DaYinXiaoPiao();

         cout<<"脚注1"<<endl;

     }

};

class footer2xiaopiao:public czhuangshixiaopiao

{

public:

     footer2xiaopiao(cxiaopiao* obj):czhuangshixiaopiao(obj){}

     void DaYinXiaoPiao()

     {

         xpobj->DaYinXiaoPiao();

         cout<<"脚注2"<<endl;

     }

};

int main()

{

     czhuangshixiaopiao* xiaopiao=new header1xiaopiao(new footer2xiaopiao(new footer1xiaopiao(new cjutixiaopiao)));

     xiaopiao->DaYinXiaoPiao();

    cout<<endl;

     xiaopiao=new header1xiaopiao(new header2xiaopiao(new footer1xiaopiao(new footer2xiaopiao (new cjutixiaopiao))));

     xiaopiao->DaYinXiaoPiao();

     return 0;

}

运行结果:

抬头1

票据正文

脚注1

脚注2

 

抬头1

抬头2

票据正文

脚注2

脚注1

Press any key to continue

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值