C++ design pattern -- decorator

#include <string>
#include <iostream>

class Head{
public :
  std::string description = "Head";
  virtual std::string get_description(  ){return description;}
};

class Decorator:public Head{
public:
  virtual std::string get_description()=0;

};

class Hair:public Decorator
{
public :
  Head *base;
  std::string get_description(){return "Hair, " + base->get_description();};
  Hair(Head* h):base(h){};
};

class Noise:public Decorator
{
public:
  Head *base;
  Noise(Head* h):base(h){};
  std::string get_description(){return "Noise, " + base->get_description();}
};


int main(){
  Head *head = new Head();
  head = new Hair(head);
  head = new Noise(head);
  std::cout << head->get_description() << std::endl;

  return 0;
}

the second time to practise decorator:

#include <string>
#include <iostream>

class Hosts{
public:
  Hosts(){};
  Hosts(std::string &str):name(str){};
  virtual std::string show(){return "host:" + name; };

private:
  std::string name;

};

class Attentions: public Hosts{
private:
  std::string name;
  Hosts* host;
public:
  Attentions(){};
  Attentions(std::string &str, Hosts* h):name(str),host(h){};
  virtual std::string show(){ return host->show() + "attentions: " + name;};
};


class Panda:public Hosts{
private:
  std::string name;
public:
  Panda(){};
  Panda(std::string &str):name(str){};
  std::string show(){return "panda: "+ name;};
};

class Flowers:public Attentions{
private:
  std::string name;
  Hosts* host;
public :
  Flowers(){};
  Flowers(std::string &str, Hosts* h):name(str),host(h){};
  std::string show(){return host->show() + "flowers: " + name; };
};


int main(){
  std::string name="yuan_yuan";
  Hosts *yuan = new Panda(name);
  std::cout << yuan->show() << std::endl;

  name = "narcissus";
  yuan = new Flowers(name, yuan);
  std::cout << yuan->show() << std::endl;


  return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值