(三)装饰模式

动态地给对象添加一些额外的职责,按添加的顺序添加职责,建造过程不稳定,即是当你向旧的类中添加新代码时,一般是为了添加核心职责或主要行为。而当需要加入的仅仅是一些特定情况下才会执行的特定的功能时(简单点就是不是核心应用的功能),就会增加类的复杂度。装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。代码如下:


#include <iostream>
#include <string>

using namespace std;
//人类基类
class person
{
      public:
            person() {}
            virtual ~person() {}
            virtual void show() {}
};
//具体人类的类,黄种人
class huang : public person
{
      private:
              string m_name;
      public:
             huang (string name) : m_name( name ) {}
             virtual ~huang() {} 
             virtual void show()
             {
                     cout << "黄种人" << m_name << "的搭配:" << endl;
             }
};
//装饰基类,继承person类的
class decorator : public person
{
      private:
              person *person1;
      public:
             decorator( person *name ) : person1( name ) {}
             virtual void show() { person1->show(); }
};
//具体的装饰类,Tshirts
class Tshirts : public decorator
{
      public:
             Tshirts( person *person ) : decorator( person ) {}
             void show() { decorator::show(); add_Tshirts(); }
      private:
              void add_Tshirts() { cout << "Tshirts" << endl;} 
};
//具体的装饰类,长裤
class pants : public decorator
{
      public:
             pants( person *person ) : decorator( person ) {}
             void show() { decorator::show(); add_pants(); }
      private:
              void add_pants() { cout << "长裤" << endl; }
};

int main()
{
    person *p1 = new huang( "yang" );
    person *p2 = new Tshirts(p1);
    person *p3 = new pants(p2);
    p3->show();
    return 0;
}

要注意的是建造过程的顺序是由客户决定的,具体点讲就是客户决定了要先穿裤子还是先穿长裤,所以在添加功能的时候客户要自己注意添加的顺序,如果先穿外套再穿Tshirts就不太好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值