栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 11 装饰器模式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 11 装饰器模式

  1. 说明
    • 装饰器模式
      • decorator pattern.
      • 动态的添加和删除,抛开设计模式,能够动态添加和删除的数据结构就是链表。链表分叉,形成树,图。
    • 好处
      • 动态的给对象添加一个功能。
      • 形式也是以链表的形似和。
      • 扩展一个功能将不需要继承或者是组合。
    • 坏处
      • 坏处复杂。
      • 类爆炸。
    • 对比
      • 集合存储方式差异。
      • 构造者定长数组,装饰器变长链表。
      • 要是有层次模式,还可以用组合模式来进行管理。
  2. 案例
    • 书接上回
      • 鞋贩子出席漫展,去cosplay。
      • 自己给自己加服饰造型,服饰即装饰的东西。
    • 代码
      #include 
      #include 
      #include 
      
      class Decorator {
      public:
       virtual std::string show() = 0;
      };
      
      class MaoZi : public Decorator {
      public:
       MaoZi(Decorator* dec):dec_(dec){}
       std::string show() {
         std::string temp = "maozi";
         if(dec_) {
           temp += "shang you yi ge " + dec_->show();
         }
         return temp;
       }
      private:
       Decorator* dec_;
      };
      
      class PiDai : public Decorator {
      public:
       PiDai(Decorator* dec):dec_(dec){}
       std::string show() {
         std::string temp = "pidai";
         if(dec_) {
           temp += "shang you yi ge " + dec_->show();
         }
         return temp;
       }
      private:
       Decorator* dec_;
      };
      
      class XieZi : public Decorator {
      public:
       XieZi(Decorator* dec):dec_(dec){}
       std::string show() {
         std::string temp = "xiezi";
         if(dec_) {
           temp += "shang you yi ge " + dec_->show();
         }
         return temp;
       }
      private:
       Decorator* dec_;
      };
      
      
      class TieHua : public Decorator {
      public:
       TieHua(){}
       std::string show() {
         return "tiehua";
       }
      };
      
      class PiKaQiu : public Decorator {
      public:
       PiKaQiu(){}
       std::string show() {
         return "pi ka qiu";
       }
      };
      
      class XieFanZi {
      public:
       XieFanZi(Decorator* zhuangshi = nullptr):maozi(new MaoZi(zhuangshi)),
                                                xiezi(new XieZi(zhuangshi)),
                                                pidai(new PiDai(zhuangshi)){}
       void show() {
         std::cout << maozi->show() << std::endl;
         std::cout << xiezi->show() << std::endl;
         std::cout << pidai->show() << std::endl;
       }
      private:
       Decorator* maozi;
       Decorator* xiezi;
       Decorator* pidai;
      };
      
      int main() {
       {
         XieFanZi cosplay(new TieHua());
         cosplay.show();
       }
       {
         XieFanZi cosplay(new PiKaQiu());
         cosplay.show();
       }
      }
      
    • 说明
      • 鞋贩子给的鞋子帽子皮带都贴了一张贴画。
      • 然后还有一套都贴了皮卡丘。
  3. 总结
    • 核心
      • 动态增删.
      • 链表,有一个next指针(Decorator对象).
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/917162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号